据我所知,每个单独的资源应该 只有一个规范 路径。那么在下面的示例中,好的 URL 模式是什么?
以公司的休息表示为例。在这个假设示例中,每个公司 拥有 0 个或多个部门,每个部门 拥有 0 个或多个员工。
没有关联公司,部门 就无法存在。
没有相关部门,员工 就无法存在。
现在我会发现资源模式的自然表示。
/companies
/companies/{companyId}
/companies/{companyId}/departments
/companies/{companyId}/departments/{departmentId}/
/companies/{companyId}/departments/{departmentId}/employees
/companies/{companyId}/departments/{departmentId}/employees/{empId}
鉴于限制,在每个部分中,我觉得如果嵌套有点深,这是有道理的。
但是,如果我想列出 ( GET) 所有公司的所有员工,我的困难就来了。
GET
资源模式最接近映射到/employees(所有员工的集合)
/employees
这是否意味着我/employees/{empId}也应该拥有,因为如果是这样,那么有两个 URI 可以获取相同的资源?
/employees/{empId}
或者也许整个模式应该被展平,但这意味着员工是一个嵌套的顶级对象。
在基本级别上/employees/?company={companyId}&department={deptId},返回与嵌套最深的模式完全相同的员工视图。
/employees/?company={companyId}&department={deptId}
对于资源由其他资源拥有 但应该可以单独查询的URL 模式的最佳实践是什么?
你所做的是正确的。一般来说,同一个资源可以有多个 URI - 没有规则说你不应该这样做。
通常,您可能需要直接访问项目或作为其他项目的子集 - 所以您的结构对我来说很有意义。
仅仅因为员工可以在部门下访问:
company/{companyid}/department/{departmentid}/employees
并不意味着它们也不能在公司下访问:
company/{companyid}/employees
这将返回该公司的员工。这取决于您的消费客户需要什么——这就是您应该设计的目标。
但我希望所有 URL 处理程序都使用相同的支持代码来满足请求,这样您就不会重复代码。