В настоящее время я возвращаю 401 Unauthorized всякий раз, когда я сталкиваюсь с ошибкой проверки в моем приложении REST API на основе Django / Piston . Изучив реестр кодов состояния HTTP, я не уверен, что это подходящий код для сбоя проверки, что вы порекомендуете?
- ошибка 400, неверный запрос
- 401 Несанкционированный
- 403 Запрещено
- 405 метод не разрешен
- 406 неприемлемо
- 412 Не выполнено предварительное условие
- 417 Ожидание не удалось
- 422 необработанного объекта
- 424 Неудачная зависимость
Обновление : «Ошибка проверки» выше означает ошибку проверки данных на уровне приложения, т. Е. Неправильно указанную дату и время, поддельный адрес электронной почты и т. Д.
validation
rest
http-status-codes
michaeljoseph
источник
источник
Ответы:
Если «ошибка проверки» означает, что в запросе есть какая-то ошибка клиента, используйте HTTP 400 (неверный запрос). Например, если предполагается, что URI имеет дату ISO-8601, и вы обнаружите, что она имеет неправильный формат или относится к 31 февраля, тогда вы вернете HTTP 400. То же самое, если вы ожидаете правильно сформированный XML в теле объекта и это не в состоянии разобрать.
(1/2016): За последние пять лет более специфичный HTTP 422 (Unprocessable Entity) WebDAV стал очень разумной альтернативой HTTP 400. См., Например, его использование в JSON API . Но учтите, что HTTP 422 не превратился в HTTP 1.1, RFC-7231 .
RESTful Web Services Ричардсона и Руби содержат очень полезное приложение о том, когда использовать различные коды ответов HTTP. Они говорят:
а также:
источник
Из RFC 4918 (а также задокументировано по адресу http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ):
источник
Дубликат в базе данных должен быть
409 CONFLICT
.Я рекомендую использовать
422 UNPROCESSABLE ENTITY
для проверки ошибок.Я дам более подробное объяснение кодов 4xx здесь: http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/
источник
Вот:
rfc2616 # section-10.4.1 - 400 Bad Request
rfc7231 # section-6.5.1 - 6.5.1. ошибка 400, неверный запрос
Относится к неправильным (не хорошо сформированным) случаям!
rfc4918 - 11,2. 422 необработанного объекта
Вывод
Основное правило: [_] 00 охватывает наиболее общий случай и случаи, которые не охватываются указанным кодом.
422 соответствует наилучшей ошибке проверки объекта (именно моя рекомендация :)
Что касается семантически ошибочного - подумайте о чем-то вроде проверки «Это имя пользователя уже существует».
400 неправильно используется для проверки объекта
источник
Я бы сказал, что технически это может быть не HTTP-сбой, поскольку ресурс (предположительно) был правильно задан, пользователь прошел аутентификацию и не было операционного сбоя (однако даже в спецификации есть некоторые зарезервированные коды, такие как 402 Payment Required, которые не ' Строго говоря, это также связано с HTTP, хотя было бы целесообразно иметь его на уровне протокола, чтобы любое устройство могло распознать условие).
Если это действительно так, я бы добавил поле статуса к ответу с ошибками приложения, например
<status> <code> 4 </ code> <message> Недопустимый диапазон дат </ message> </ status>
источник
Немного больше информации о семантике этих ошибок в RFC 2616 , который документирует HTTP 1.1.
Лично я бы, наверное, использовал
400 Bad Request
, но это только мое личное мнение без какой-либо фактической поддержки.источник
Что именно вы подразумеваете под «провалом валидации»? Что вы проверяете? Вы имеете в виду что-то вроде синтаксической ошибки (например, неправильно сформированный XML)?
Если это так, я бы сказал, что «400 плохих запросов», вероятно, правильно, но не зная, что именно вы «проверяете», невозможно сказать.
источник