Я проектирую RESTful API и столкнулся с проблемой, связанной с подресурсами.
Я вижу другие API, использующие полный URL для работы над подресурсами. Возьмите пример, когда в Company has Departments
а в Department has Employees
.
В начале я думал о реализации всех возможных URL. В результате чего:
Подход А
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}
Как видите, есть много URL, которые делают то же самое. Пример: 08 дублируется из 12; 09 дублируется из 13; 17 дублируется из 21 и 25...
Я хочу удалить дубликаты, но сохранить последовательность. Таким образом, перепроектированный API с учетом принципа sup-resources are fine but sub-sub-resources are not
. Что привело к следующему:
Подход Б
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. Существуют ли подводные камни, которые следует рассмотреть в подходе BI при условии, что документация также предоставлена?
Бонусные баллы, если вы указываете на другие API в соответствии с подходом B.
РЕДАКТИРОВАТЬ
Elad Tabak
представил хорошие идеи.
Я увлекаюсь API, используя подход B:
https://developers.google.com/youtube/v3/docs/