>假设您正在使用department
和employee
资源的常用示例创建一个服务。用于检索这些的终结点可能如下所示
/api/departments
/api/employees?department=21
现在,假设iPhone客户端应用程序想要使用此服务来显示员工及其所属部门的大表。似乎开发人员首先需要提出请求以获取所有部门,然后对于找到的每个部门,请求获取该部门的员工。最后,在客户端,需要将数据拼接在一起,并将连接的结果呈现给用户。
这里是否有不同的 REST 原则可以减少需要发出的请求?是否应该创建一个一次性返回所有内容的/api/employessByDepartment
端点?
REST 实际上只是客户端与系统域交互的方式。一个非常简单的域可能具有员工和部门的概念,除了数据库架构之外,它们之间没有体系结构链接。例如,一个员工可以在一个部门,一个部门可以有多个员工。
如果客户端需要它们一起,这可能表示域中存在经常交互的区域。员工及其部门,反之亦然。为什么客户需要问这个?为什么它需要所有这些数据?
域和客户端之间存在共生关系。域支持客户端所需的内容,以便客户端与最终用户一起工作。因此,域可能需要支持更高级别的概念,以支持客户端尝试对应用用户执行的操作。
解决此问题的 REST 方法可能是:
/api/department/employees
/api/employees/department
面向领域的问题方法可能是:
/api/company/structure
返回所有员工及其部门。
重用相同的/api/employees
并添加groupBy
参数怎么样?
/api/employees?groupBy=department
市场上已经有一个解决方案,它被称为网络。 :)如果你想"显示他们所属的员工和部门的大表",你可以发出一个带有表格的HTML页面。
如果你不喜欢 HTML,你可以在 JSON 或 XML 或 CSV 或任何你想要的东西中拥有完全相同资源的替代表示形式,只需在服务器上实现提供适当的media-type
,你就完成了。
正如您所说,只需创建所需的资源即可。不要使它复杂化。