Tôi đang thiết kế một RESTful API và tôi đã đưa ra một vấn đề liên quan đến các tài nguyên phụ.RESTful API - Thiết kế các tài nguyên phụ
Tôi thấy các API khác sử dụng URL đầy đủ để hoạt động trên các tài nguyên phụ. Lấy ví dụ tại số Company has Departments
và Department has Employees
.
Ban đầu, tôi thực hiện tất cả các URL có thể. Kết quả trên như sau:
Cách tiếp cận Một
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}
Như bạn có thể thấy, có rất nhiều URL mà làm điều tương tự. Ví dụ: 08 được nhân đôi 12; 09 được nhân đôi là 13; 17 được nhân đôi của 21 và 25 ...
Tôi muốn loại bỏ trùng lặp nhưng giữ tính nhất quán. Vì vậy, hãy thiết kế lại API với nguyên tắc trong tâm trí sup-resources are fine but sub-sub-resources are not
. Những kết quả trên như sau:
Cách tiếp cận 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}
Câu hỏi của tôi
Q1. Phương thức B được xem là RESTful? (Tôi đang giả định)
Q2. Có những cạm bẫy nào Phương pháp tiếp cận B Tôi nên xem xét, giả sử rằng tài liệu đó cũng được cung cấp?
Điểm thưởng nếu bạn trỏ đến các API khác theo sau Phương pháp tiếp cận B.
EDIT
Elad Tabak
được trình bày những hiểu biết tốt.
Tôi thích một số API sử dụng Tiếp cận B:
https://developers.google.com/youtube/v3/docs/
https://developer.github.com/guides/getting-started/
https://dev.twitter.com/rest/public
Đó là một chút quá rộng, Q3 và 4 cơ bản mời để đổ cuốn sách về thiết kế webservice. Bạn phải hỏi một câu hỏi chứ không phải một câu hỏi. Câu hỏi cốt lõi của bạn có vẻ là kết hợp Q1 + Q2. – Gimby
Cảm ơn Gimby, đồng ý, nó rất rộng và tôi quan tâm nhất đến Q1 và Q2. – Rafa