如何设计一个REST API,它不需要客户端发出许多请求来获取所需的数据?

时间:2018-03-16 06:01:08

标签: rest web-services api-design

假设您使用常用的departmentemployee资源示例创建服务。检索这些端点的端点可能类似于

/api/departments
/api/employees?department=21

现在假设一个iPhone客户端应用程序想要使用此服务来显示员工及其所属部门的大表。看起来开发人员首先需要提出获取所有部门的请求,然后对于找到的每个部门,请求获得该部门的员工。最后在客户端,需要将数据拼接在一起,并将连接结果呈现给用户。

这里是否有一个不同的REST原则会导致需要制作的请求减少?是否应该创建一个/api/employessByDepartment端点,一次性返回所有内容?

3 个答案:

答案 0 :(得分:1)

如何重复使用相同的/api/employees并添加groupBy参数?

/api/employees?groupBy=department

答案 1 :(得分:1)

REST实际上就是客户端与系统域的交互方式。一个非常简单的域可能具有employee和department的概念,除了数据库模式之外,它们之间没有架构链接。例如员工可以在一个部门,一个部门可以有很多员工。

如果客户端同时需要它们,则可能表明域中存在与频繁交互的区域。员工及其部门,反之亦然。为什么客户需要问这个?为什么需要所有这些数据?

域名与客户之间存在共生关系。域支持客户端所需的内容,以便让客户端与最终用户一起工作。因此,域可能需要支持更高级别的概念,以支持客户端尝试对应用程序用户执行的操作。

问题的REST方法可能是:

/api/department/employees
/api/employees/department

面向域的方法可能是:

/api/company/structure

返回所有员工及其部门。

答案 2 :(得分:1)

市场上已有解决方案,它被称为网络。 :)如果你想要显示他们所属的员工和部门的大表,你可以发布带有表格的HTML页面。

如果您不喜欢HTML,您可以使用JSON或XML或CSV中的完全相同资源的替代表示,或者您想要的任何内容,只需实现正确的{{ 1}}在服务器上,你已经完成了。

正如您所说,只需创建您需要的资源即可。不要让它复杂化。