Hãy tưởng tượng một API để xác định xem một người đã chọn động vật linh hồn của họ hay chưa. Họ chỉ có thể có không hoặc một động vật tinh thần.
Hiện tại:
/person/{id}/selectedSpiritAnimal
khi họ đã chọn một con vật trả về http 200 và {selectedAnimal:mole}
nhưng khi họ không có lựa chọn thì nó trả về http 404.
Điều này làm cho động vật tinh thần của tôi không hài lòng vì chúng tôi đại diện cho một mối quan tâm miền hợp lệ - chưa chọn một động vật tinh thần - là một lỗi HTTP.
Thêm vào đó, với tư cách là một doanh nghiệp - erm Sprit-Animal-Hampers-R-us - chúng tôi muốn biết khi ai đó không có lựa chọn để chúng tôi có thể nhắc họ.
Thật là một phản ứng tốt hơn ở đây:
HTTP 200 và {selectedAnimal:null}
hoặc thậm chí rõ ràng hơn
HTTP 200 và {selectedAnimal:null, spiritAnimalSelected: false}
Hoặc tốt hơn là trả lại 404? Vì rất giống this image has not yet been uploaded
khi xem hình ảnh trực tuyến sẽ là 404. this person has not selected a spirit animal
có thể là 404
Câu hỏi này đã được đề xuất dưới dạng trùng lặp nhưng câu hỏi đó giải quyết một URL hợp lệ khác được yêu cầu khi ứng dụng được định cấu hình để không cho phép thay đổi mà URL thể hiện.
Trong khi đó ở đây tôi đang xem làm thế nào một người đại diện cho một tài nguyên mà sự vắng mặt của tài nguyên đó có ý nghĩa. Tức là khách hàng có thể yêu cầu URL và phản hồi là bạn đã yêu cầu thành công tài nguyên thể hiện sự vắng mặt của một thứ.
Vì vậy, đây không phải là 'logic kinh doanh' mà là một tình huống mà sự vắng mặt của một thứ có ý nghĩa (có thể là do nhiều đồng nghiệp của tôi cho rằng 404 vẫn đúng) nhưng tôi không chắc làm thế nào để ánh xạ nó tới thông số kỹ thuật
Rất khó để chọn một câu trả lời. Tôi đã thay đổi suy nghĩ của mình nhiều lần trong cuộc trò chuyện ở đây và cuộc trò chuyện đang diễn ra.
Điều giải quyết nó cho tôi ở đây là thông số kỹ thuật nói rằng 4xx là khi máy khách bị lỗi . Trong trường hợp này, máy khách đã được yêu cầu mong đợi một phản hồi từ url được chọn SpriteAnimal để không bị lỗi.
Sự đồng thuận giữa các đồng nghiệp của tôi là đây là một triệu chứng của một thiết kế API xấu
Có lẽ tốt hơn là chúng tôi chỉ cần yêu cầu / người / {id} và trả về một tập hợp các mối quan hệ liên kết cho người đó ... sau đó nếu bạn không được cung cấp liên kết / chọnSpriteAnimal (khi một người không có lựa chọn) nhưng bạn hãy gọi nó bằng mọi cách sau đó 404 có ý nghĩa. Hoặc là bạn triển khai các phản hồi một phần và cho phép / person / {id} trả về một tài liệu đầy đủ hơn trừ khi khách hàng yêu cầu một tập hợp con của dữ liệu