Код состояния HTTP, когда объект не найден с идентификатором, который передается через тело запроса
Я объясню мои сомнения, приведя пример.
Предположим, я проектирую конечную точку POST
за student
ресурс и как часть конечной точки POST я хочу teacher
uuid для передачи (кроме других деталей), которое является обязательным полем. Так что я могу связать student
к teacher
, Теперь, если teacher
ресурс с данным uuid
нет в моей БД то, что я должен бросить:
400 (Bad request)
404 (Not found).
Я думаю 400
будет правильной вещью.
Если бы у меня был запрос, как показано ниже, я бы бросил 404, как
GET /xyy/teachers/{uuid of a teacher}
,
Поправь меня, если я ошибаюсь. Благодарю.
2 ответа
Я бы предпочел 404
потому что запрошенный вами ресурс недоступен. Если вы посмотрите на спецификации w3.org, они говорят, что 400
Сервер не может понять запрос из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.
Поскольку ваш синтаксис не искажен, он звучит как классический 404 для меня.
На самом деле это хороший вопрос. Как отмечали другие, ни (Плохой запрос), ни (Не найдено) не кажутся идеальными для такой ситуации.
(Плохой запрос) обычно используется, чтобы сигнализировать о неправильном синтаксисе или неверно сформированном запросе, что воспринимается как ошибка клиента. В вашей ситуации запрос полностью действителен и соответствует ожиданиям сервера.student
404
может быть семантически запутанным.
В качестве альтернативы позвольте мне предложить <tcodeid="411744"></tcodeid="411744">
(Unprocessable Entity) ответ, часть расширений WebDAV. Это означало охватить случаи, когда сервер ...[...] понимает тип содержимого объекта запроса, и синтаксис объекта запроса правильный, но он не смог обработать содержащиеся инструкции.
Это действительно хорошо подходит для вашей проблемы.