Bir kişinin ruh hayvanını seçip seçmediğini belirlemek için bir API düşünün. Sadece sıfır veya bir ruh hayvanına sahip olabilirler.
Şu anda:
/person/{id}/selectedSpiritAnimal
bir hayvan seçtiklerinde http 200 ve {selectedAnimal:mole}
ancak seçimleri olmadığında http 404 değerini döndürür.
Bu, benim bir ruh hayvanını HTTP hatası olarak - henüz bir ruh hayvanı seçmemiş olmakla - temsil ettiğimiz için ruh hayvanımı mutsuz ediyor.
Ayrıca, bir iş olarak - erm Sprit-Animal-Hampers-R-us - birisinin ne zaman seçimi olmadığını bilmek isteriz, böylece onları isteyebiliriz.
Burada daha iyi bir yanıt var:
HTTP 200 ve {selectedAnimal:null}
hatta daha açık
HTTP 200 ve {selectedAnimal:null, spiritAnimalSelected: false}
Yoksa 404'ü iade etmek daha mı iyi? this image has not yet been uploadedÇevrimiçi olarak bir görüntüyü izlerken olduğu gibi bir 404 olurdu. 404 this person has not selected a spirit animalolabilir
Bu soru kopya olarak önerildi, ancak bu soru, uygulama URL'nin temsil ettiği değişikliğe izin vermeyecek şekilde yapılandırıldığında istenen başka bir geçerli URL'yi ele alıyor.
Halbuki burada kaynağın yokluğunun anlamlı olduğu bir kaynağı nasıl temsil ettiğine bakıyorum. Yani istemcinin URL istemesi için geçerlidir ve yanıt, bir şeyin yokluğunu temsil eden kaynağı başarıyla talep etmiş olmanızdır.
Yani bu 'iş mantığı' değil, bir şeyin yokluğunun bir anlamı olduğu bir durum (meslektaşlarımın çoğu 404'ün hala doğru olduğunu iddia ediyor olabilir) ama bunu nasıl eşleştireceğimden emin değilim spec.
Bir cevap seçmek çok zor. Buradaki ve işte devam eden görüşmelerde fikrimi defalarca değiştirdim.
Benim için buraya yerleşen şey, specin müşterinin hata yaptığı bir 4xx olduğunu söylediğidir . Bu örnekte, istemciye seçilenSpiritAnimal URL'sinden bir yanıt beklemesi söylendi, bu nedenle hata oluşmadı.
Meslektaşlarım arasındaki fikir birliği, bunun kötü bir API tasarımının belirtisi olduğudur.
Muhtemelen / person / {id} 'i talep etmemiz ve kişi için bir dizi bağlantı ilişkisi döndürmemiz daha iyi olur ... o zaman / selectedSpiritAnimal bağlantısı (bir kişinin seçimi olmadığında) verilmezse, ancak yine de 404 mantıklı. Veya kısmi yanıtlar uyguladığınızı ve / / id / {id} istemcisinin verilerin bir alt kümesini istemediği sürece daha eksiksiz bir belge döndürmesine izin verdiğinizde