小编典典

REST 嵌套资源的最佳实践是什么?

all

据我所知,每个单独的资源应该 只有一个规范 路径。那么在下面的示例中,好的 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 模式的最佳实践是什么?


阅读 88

收藏
2022-03-29

共1个答案

小编典典

你所做的是正确的。一般来说,同一个资源可以有多个 URI - 没有规则说你不应该这样做。

通常,您可能需要直接访问项目或作为其他项目的子集 - 所以您的结构对我来说很有意义。

仅仅因为员工可以在部门下访问:

company/{companyid}/department/{departmentid}/employees

并不意味着它们也不能在公司下访问:

company/{companyid}/employees

这将返回该公司的员工。这取决于您的消费客户需要什么——这就是您应该设计的目标。

但我希望所有 URL 处理程序都使用相同的支持代码来满足请求,这样您就不会重复代码。

2022-03-29