我正在設計一個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