Уявіть собі API, щоб визначити, чи вибрала людина свою духовну тварину. У них можуть бути лише нульові або одні спиртні тварини.
В даний час:
/person/{id}/selectedSpiritAnimal
коли вони вибрали, тварина повертає http 200 і {selectedAnimal:mole}
але коли вони не мають вибору, він повертає http 404.
Це робить мою спиртну тварину нещасною, оскільки ми представляємо дійсну проблему домену - ще не вибравши спиртну тварину - як помилку HTTP.
Крім того, як бізнес - Erm Sprit-Animal-Hampers-R-us - ми хочемо знати, коли у когось немає вибору, щоб ми могли їх підказати.
Яка краща відповідь тут:
HTTP 200 і {selectedAnimal:null}
або навіть більш чітко
HTTP 200 і {selectedAnimal:null, spiritAnimalSelected: false}
Або краще повернути 404? Оскільки так, як this image has not yet been uploaded
при перегляді зображення в Інтернеті було б 404, this person has not selected a spirit animal
може бути 404
Це запитання було запропоновано як дублікат, але це питання стосується інакше дійсної URL-адреси, яка запитується, коли програма налаштована таким чином, щоб не дозволяти змінити цю URL-адресу.
В той час як тут я дивлюся на те, як можна представити ресурс, де відсутність цього ресурсу має сенс. Тобто клієнт дійсно запитує URL-адресу, і у відповідь ви успішно запитували ресурс, який представляє відсутність речі.
Тож це не «ділова логіка», а скоріше обставина, коли відсутність речі має значення (можливо, так багато моїх колег стверджують, що 404 все-таки є правильним), але я не знаю, як це позначити на спец.
Дуже важко вибрати відповідь. Я передумав кілька разів під час розмови тут і тієї, що триває на роботі.
Що тут вирішується для мене, це те, що специфікація говорить про те, що 4xx - це коли клієнт допустив помилку . У цьому випадку клієнту сказали очікувати відповіді від вибраного URL-адресиSpiritAnimal, тому він не помилився.
Консенсус серед моїх колег полягає в тому, що це симптом поганого дизайну API
Напевно, було б краще, щоб ми просто просили / person / {id}, і це повертає набір зв’язків для особи ... тоді, якщо вам не надано / selectedSpiritAnimal (якщо людина не має вибору), але ви називати це все одно, то 404 має сенс. Або що ви реалізуєте часткові відповіді і нехай / person / {id} повертає більш повний документ, якщо клієнт не вимагає підмножини даних