Правильный код состояния HTTP для неправильного ввода
Что такое оптимальный код ответа HTTP, когда не сообщается 200 (все нормально), но ошибка ввода?
Например, вы отправляете некоторые данные на сервер, и он ответит, что ваши данные ошибочны.
с помощью 500
больше похоже на проблему с сервером
с помощью 200
с предупреждением/ответом на текст ошибки плохо (разрешить кеширование и все не в порядке)
используя 204
и ничего не возвращаю, возможно, хорошо (но хорошо поддерживается?)
использование 404
неверно, если запрашиваемый путь (script) доступен и находится в надлежащем месте
Ответы
Ответ 1
Коды, начинающиеся с 4 (4xx), предназначены для клиентских ошибок. Может быть, 400 (Bad Request) может быть подходящим для этого случая? Определение в http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html говорит:
"Запрос не мог быть понят сервером из-за искаженного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений".
Ответ 2
У нас была такая же проблема и при создании нашего API. Мы искали код состояния HTTP, эквивалентный InvalidArgumentException
. После прочтения исходной статьи ниже мы закончили использование 422 Unprocessable Entity
, в котором говорится:
Код состояния 422 (необработанная сущность) означает, что сервер понимает тип содержимого объекта запроса (следовательно, код статуса 415 (неподдерживаемый тип носителя) является неуместным), и синтаксис объекта запроса является правильным (таким образом, 400 (Bad Request) неуместен), но не смог обработать содержащиеся инструкции. Например, это условие ошибки может возникнуть, если тело запроса XML содержит правильно сформированные (т.е. Синтаксически правильные), но семантически ошибочные инструкции XML.
источник: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm
Ответ 3
В дополнение к RFC Spec вы также можете увидеть это в действии. Проверьте ответы twitter и facebook.
https://dev.twitter.com/docs/error-codes-responses
http://www.fb-developers.info/tech/fb_dev/faq/general/gen_10.html
Ответ 4
417 означает HTTP_EXPECTATION_FAILED
Ответ 5
404 - Не найдено - может использоваться для запрошенного URI, или запрошенный ресурс, такой как пользователь, не существует.