【发布时间】:2014-01-23 22:37:25
【问题描述】:
据我所知,每个单独的资源应该只有一个规范路径。那么在下面的示例中,好的 URL 模式应该是什么?
以公司的休息表示为例。在这个假设示例中,每个公司拥有 0 个或更多部门,每个部门拥有 0 个或更多员工。
一个部门不可能存在没有关联公司。
如果没有相关部门,员工就无法存在。
现在我会找到资源模式的自然表示。
-
/companies公司集合 - 接受新公司的认购。获取整个系列。 -
/companies/{companyId}一家个体公司。接受 GET、PUT 和 DELETE -
/companies/{companyId}/departments接受新项目的 POST。 (在公司内创建一个部门。) /companies/{companyId}/departments/{departmentId}//companies/{companyId}/departments/{departmentId}/employees/companies/{companyId}/departments/{departmentId}/employees/{empId}
考虑到限制,在每个部分中,我觉得如果嵌套得有点深,这是有道理的。
但是,如果我想列出 (GET) 所有公司的所有员工,我的困难就来了。
该资源模式最接近映射到/employees(所有员工的集合)
这是否意味着我也应该拥有/employees/{empId},因为如果是这样,那么有两个 URI 可以获取相同的资源?
或者也许整个架构应该被展平,但这意味着员工是嵌套的顶级对象。
在基本级别上,/employees/?company={companyId}&department={deptId} 返回与嵌套最深的模式完全相同的员工视图。
对于资源由其他资源拥有但应该可以单独查询的 URL 模式的最佳做法是什么?
【问题讨论】:
-
这几乎与stackoverflow.com/questions/7104578/… 中描述的问题完全相反,尽管答案可能是相关的。这两个问题都与所有权有关,但该示例暗示顶级对象不是拥有者。
-
正是我想知道的。对于给定的用例,您的解决方案似乎很好,但是如果关系是聚合而不是组合呢?仍在努力弄清楚这里的最佳实践是什么......此外,这个解决方案是否仅意味着创建关系,例如现有人员受雇还是创建人员对象?
-
它在我的虚构示例中创建了一个人。我使用这些领域术语的原因是它是一个可以合理理解的示例,尽管它模仿了我的实际问题。您是否查看过可能更阻碍您建立关系的链接问题。
-
我已将我的问题分为一个答案和一个问题。
标签: rest api-design