Tôi có một hệ thống phân cấp đối tượng mà tôi cần hiển thị thông qua API RESTful và tôi không chắc các URL của mình nên được cấu trúc như thế nào và chúng sẽ trả về những gì. Tôi không thể tìm thấy bất kỳ phương pháp hay nhất nào.
Giả sử tôi có Chó và Mèo kế thừa từ Động vật. Tôi cần phẫu thuật CRUD trên chó và mèo; Tôi cũng muốn có thể thực hiện các hoạt động trên động vật nói chung.
Ý tưởng đầu tiên của tôi là làm một cái gì đó như thế này:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
Vấn đề là bộ sưu tập / động vật bây giờ "không nhất quán", vì nó có thể quay lại và lấy các đối tượng không có cấu trúc giống hệt nhau (chó và mèo). Việc có một bộ sưu tập trả về các đối tượng có các thuộc tính khác nhau có được coi là "RESTful" không?
Một giải pháp khác là tạo một URL cho từng loại cụ thể, như sau:
GET /dogs # get all dogs
POST /dogs # create a dog
GET /dogs/123 # get dog 123
GET /cats # get all cats
POST /cats # create a cat
GET /cats/123 # get cat 123
Nhưng bây giờ tình cảm giữa chó và mèo đã mất. Nếu một người muốn truy xuất tất cả các động vật, cả tài nguyên chó và mèo phải được truy vấn. Số lượng URL cũng sẽ tăng lên với mỗi loại con động vật mới.
Một gợi ý khác là tăng cường giải pháp thứ hai bằng cách thêm điều này:
GET /animals # get common attributes of all animals
Trong trường hợp này, các động vật được trả về sẽ chỉ chứa các thuộc tính chung cho tất cả các động vật, giảm các thuộc tính dành riêng cho chó và dành riêng cho mèo. Điều này cho phép truy xuất tất cả các động vật, mặc dù với ít chi tiết hơn. Mỗi đối tượng được trả về có thể chứa một liên kết đến phiên bản chi tiết, cụ thể.
Bất kỳ ý kiến hoặc đề xuất?