我正在设计一个RESTful API,并提出了与子资源相关的问题。RESTful API - 设计子资源
我看到其他API使用完整的URL来操作子资源。以Company has Departments
和Department has Employees
为例。
在开始时我会讨论实现所有可能的URL。从而在以下方面:
解决方法A
01. ### COMPANY URLS ###
02. DELETE /companies/{companyId}
03. GET /companies/{companyId}
04. POST /companies
05. PUT /companies/{companyId}
06.
07. ### DEPARTMENT URLS ###
08. DELETE /companies/{companyId}/departments/{departmentId}
09. GET /companies/{companyId}/departments/{departmentId}
10. POST /companies/{companyId}/departments
11. PUT /companies/{companyId}/departments/{departmentId}
12. DELETE /departments/{departmentId}
13. GET /departments/{departmentId}
14. PUT /departments/{departmentId}
15.
16. ### EMPLOYEE URLS ###
17. DELETE /companies/{companyId}/departments/{departmentId}/employees/{employeeId}
18. GET /companies/{companyId}/departments/{departmentId}/employees/{employeeId}
19. POST /companies/{companyId}/departments/{departmentId}/employees
20. PUT /companies/{companyId}/departments/{departmentId}/employees/{employeeId}
21. DELETE /departments/{departmentId}/employees/{employeeId}
22. GET /departments/{departmentId}/employees/{employeeId}
23. POST /departments/{departmentId}/employees
24. PUT /departments/{departmentId}/employees/{employeeId}
25. DELETE /employees/{employeeId}
26. GET /employees/{employeeId}
27. PUT /employees/{employeeId}
正如你可以看到,有很多网址,它做同样的事情。例如:08重复12; 09重复13; 17是重复的21和25 ...
我想删除重复但保持一致性。所以,重新设计了一个原理为sup-resources are fine but sub-sub-resources are not
的API。这导致在以下方面:
B方法
01. ### COMPANY URLS ###
02. DELETE /companies/{companyId}
03. GET /companies/{companyId}
04. POST /companies
05. PUT /companies/{companyId}
06.
07. ### DEPARTMENT URLS ###
08. DELETE /departments/{departmentId}
09. GET /departments/{departmentId}
10. GET /companies/{companyId}/departments
11. POST /companies/{companyId}/departments
12. PUT /departments/{departmentId}
13.
14. ### EMPLOYEE URLS ###
15. DELETE /employees/{employeeId}
16. GET /employees/{employeeId}
17. GET /departments/{departmentId}/employees
18. POST /departments/{departmentId}/employees
19. PUT /employees/{employeeId}
我的问题
Q1。是方法B被认为是RESTful? (我现在假设)
Q2。有没有陷阱方法B我应该考虑,假设还提供了文档?
奖励积分,如果你指向其他API以下方法B。
编辑
Elad Tabak
呈现良好的见解。
我喜欢一些API使用B方法:
https://developers.google.com/youtube/v3/docs/
https://developer.github.com/guides/getting-started/
https://dev.twitter.com/rest/public
这样做可能有些过于宽泛,Q3和4基本上邀请转储书WebService的设计。你应该问一个问题,而不是问卷。你的核心问题似乎是Q1 + Q2的结合。 – Gimby
感谢Gimby,同意,它非常广泛,我关心Q1和Q2最多。 – Rafa