Правильный код состояния HTTP для неправильного ввода

78

Что такое оптимальный код ответа HTTP, когда не сообщается 200 (все нормально), но ошибка ввода?

Например, вы отправляете некоторые данные на сервер, и он ответит, что ваши данные ошибочны.

с помощью 500 больше похоже на проблему с сервером
с помощью 200 с предупреждением/ответом на текст ошибки плохо (разрешить кеширование и все не в порядке)
используя 204 и ничего не возвращаю, возможно, хорошо (но хорошо поддерживается?)
использование 404 неверно, если запрашиваемый путь (script) доступен и находится в надлежащем месте

Теги:
validation
http

5 ответов

85
Лучший ответ

Коды, начинающиеся с 4 (4xx), предназначены для клиентских ошибок. Может быть, 400 (Bad Request) может быть подходящим для этого случая? Определение в http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html говорит:

"Запрос не мог быть понят сервером из-за искаженного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений".

  • 9
    400 Bad Request - это не плохо, но обычно его следует зарезервировать для неправильно сформированного синтаксиса. OP, кажется, больше заботится о случае с правильно сформированным синтаксисом, но с недопустимыми значениями. Plus 400 - довольно распространенный код ответа «о, черт, что-то не так», который вы можете отличить от конкретного случая ошибочного ввода.
  • 1
    Обратите внимание, что формулировка была обновлена в RFC 7231, и «запрос не может быть понят сервером из-за неправильного синтаксиса» был обновлен до «сервер не может или не будет обрабатывать запрос из-за того, что воспринимается как клиент ошибка (например, неправильно сформированный синтаксис запроса, неверное формирование кадра сообщения запроса или ложная маршрутизация запроса) ".
41

У нас была такая же проблема и при создании нашего 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

  • 1
    Это лучший ответ, чем принятый
7

В дополнение к 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

  • 14
    Вы можете получить больше голосов, если вы извлечете примеры из своих ссылок.
-2

417 означает HTTP_EXPECTATION_FAILED

-4

404 - Не найдено - может использоваться для запрошенного URI, или запрошенный ресурс, такой как пользователь, не существует.

  • 2
    ОП уже исключил это: « использование 404 неверно, если запрошенный путь (скрипт) доступен и находится в правильном месте»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню