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


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

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

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

4 106

4 ответа:

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

"запрос не может быть понят сервером из-за синтаксических ошибок. Клиент не должен повторять запрос без изменений. "

У нас была такая же проблема при создании нашего API. Мы искали код состояния HTTP, эквивалентный InvalidArgumentException. После прочтения исходной статьи Ниже, мы в конечном итоге с помощью 422 Unprocessable Entity в которой говорится:

код состояния 422 (необработанный объект) означает, что сервер понимает тип контента объекта запроса (следовательно, код состояния 415 (неподдерживаемый тип носителя) неуместен), а синтаксис объекта запроса является правильным (таким образом, 400 (плохой запрос) код состояния не подходит), но не удалось обработать содержащиеся инструкции. Например, это условие ошибки может возникнуть, если тело запроса XML содержит хорошо сформированные (т. е. синтаксически правильные), но семантически ошибочные инструкции XML.

источник: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm

в дополнение к RFC Spec вы также можете увидеть это в действии. Проверьте twitter и facebook ответы.

https://developer.twitter.com/en/docs/ads/general/guides/response-codes

http://www.fb-developers.info/tech/fb_dev/faq/general/gen_10.html

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