Bayangkan sebuah API untuk mengidentifikasi apakah seseorang telah memilih hewan roh mereka. Mereka hanya dapat memiliki nol atau satu binatang roh.
Saat ini:
/person/{id}/selectedSpiritAnimal
ketika mereka telah memilih binatang, kembalikan http 200 dan {selectedAnimal:mole}
tetapi ketika mereka tidak memiliki pilihan itu mengembalikan http 404.
Ini membuat hewan roh saya tidak bahagia karena kami mewakili masalah domain yang valid - karena belum memilih hewan roh - sebagai kesalahan HTTP.
Plus, sebagai bisnis - erm Sprit-Animal-Hampers-R-us - kami ingin tahu ketika seseorang tidak memiliki pilihan sehingga kami dapat meminta mereka.
Apa tanggapan yang lebih baik di sini:
HTTP 200 dan {selectedAnimal:null}
atau bahkan lebih eksplisit
HTTP 200 dan {selectedAnimal:null, spiritAnimalSelected: false}
Atau lebih baik mengembalikan 404? Karena seperti this image has not yet been uploaded
ketika melihat gambar secara online akan menjadi 404. this person has not selected a spirit animal
mungkin 404
Pertanyaan ini ini telah diusulkan sebagai duplikat tetapi pertanyaan itu membahas URL yang valid yang diminta ketika aplikasi telah dikonfigurasi untuk tidak mengizinkan perubahan yang diwakili oleh URL.
Sedangkan di sini saya melihat bagaimana seseorang mewakili sumber daya di mana ketiadaan sumber daya itu bermakna. Yaitu sah bagi klien untuk meminta URL dan jawabannya adalah Anda telah berhasil meminta sumber daya yang mewakili tidak adanya sesuatu.
Jadi ini bukan 'logika bisnis' melainkan keadaan di mana ketiadaan sesuatu memiliki makna (mungkin karena banyak rekan saya berpendapat bahwa 404 masih benar) tetapi saya tidak yakin bagaimana memetakan itu ke spek.
Sangat sulit untuk memilih jawaban. Saya telah berubah pikiran beberapa kali selama pembicaraan di sini dan yang sedang berlangsung di tempat kerja.
Hal yang menentukan bagi saya di sini adalah bahwa spesifikasi mengatakan bahwa 4xx adalah ketika klien melakukan kesalahan . Dalam hal ini klien telah diberitahu untuk mengharapkan respons dari urlSpiritAnimal yang dipilih sehingga belum keliru.
Konsensus di antara rekan-rekan saya adalah bahwa ini adalah gejala dari desain API yang buruk
Mungkin akan lebih baik jika kita hanya meminta / orang / {id} dan mengembalikan seperangkat hubungan tautan untuk orang tersebut ... maka jika Anda tidak diberi tautan / terpilihSpiritAnimal (ketika seseorang tidak memiliki pilihan) tetapi Anda sebut saja demikian maka 404 masuk akal. Atau Anda menerapkan respons sebagian dan membiarkan / orang / {id} mengembalikan dokumen yang lebih lengkap kecuali klien meminta subset data