Что такое оптимальный код ответа HTTP, когда не сообщается 200 (все нормально), но ошибка ввода?
Например, вы отправляете некоторые данные на сервер, и он ответит, что ваши данные ошибочны.
с помощью 500
больше похоже на проблему с сервером
с помощью 200
с предупреждением/ответом на текст ошибки плохо (разрешить кеширование и все не в порядке)
используя 204
и ничего не возвращаю, возможно, хорошо (но хорошо поддерживается?)
использование 404
неверно, если запрашиваемый путь (script) доступен и находится в надлежащем месте
Коды, начинающиеся с 4 (4xx), предназначены для клиентских ошибок. Может быть, 400 (Bad Request) может быть подходящим для этого случая? Определение в http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html говорит:
"Запрос не мог быть понят сервером из-за искаженного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений".
У нас была такая же проблема и при создании нашего 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
В дополнение к 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
417 означает HTTP_EXPECTATION_FAILED
404 - Не найдено - может использоваться для запрошенного URI, или запрошенный ресурс, такой как пользователь, не существует.
400 Bad Request
- это не плохо, но обычно его следует зарезервировать для неправильно сформированного синтаксиса. OP, кажется, больше заботится о случае с правильно сформированным синтаксисом, но с недопустимыми значениями. Plus 400 - довольно распространенный код ответа «о, черт, что-то не так», который вы можете отличить от конкретного случая ошибочного ввода.