Вопрос по validation, rest, http-status-codes – Какой соответствующий код состояния HTTP возвращается службой REST API при сбое проверки?

334

м в настоящее время возвращает 401 неавторизованным всякий раз, когда я сталкиваюсь с ошибкой проверки в моемДжанго /Поршень основанное на REST API приложение. Посмотрев наРеестр кодов состояния HTTP I 'я не уверен, что это подходящий код для ошибки проверки, что вывсем порекомендуете?

ошибка 400, неверный запрос401 Несанкционированный403 Запрещено405 метод не разрешен406 Недопустимо412 Не выполнено предварительное условие417 Ожидание не удалось422 необработанного объекта424 Неудачная зависимость

Обновить: "Ошибка проверки выше означает сбой проверки данных на уровне приложения, т. е. неверно указано время и дата, фиктивный адрес электронной почты и т. д.

Фуив, Кенниссылка предлагает код 422, как Джимответ теперьниже, #TheMoreYouKnow #SavingYouAClick ruffin
Я думаю, что 401 более понятен. insign
Проверьте этот ответ:stackoverflow.com/a/2657624/221612 Kenny Meyer

Ваш Ответ

7   ответов
79

Из RFC 4918 (а также задокументировано наhttp://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml):

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

Я бы порекомендовал 422 - Unprocessable Entity для ошибок проверки более 400 - Bad Request java_geek
7

Я бы сказал, что технически это может быть не HTTP-сбой, поскольку ресурс (предположительно) был правильно задан, пользователь прошел аутентификацию и не было операционного сбоя (однако даже в спецификации есть некоторые зарезервированные коды, такие как 402 Payment Required, которые не 'Строго говоря, это также связано с HTTP, хотя было бы целесообразно иметь его на уровне протокола, чтобы любое устройство могло распознать условие).

Если это'На самом деле, я бы добавил в ответ поле статуса с ошибками приложения, например <

статус> <Код> 4 </ Код> <сообщение>Диапазон дат недействителен </ Сообщение> </ Состояние>

0

Что именно вы подразумеваете под "Ошибка проверки "? Что вы проверяете? Вы имеете в виду что-то вроде синтаксической ошибки (например, неправильно сформированный XML)?

Если это'в таком случае, яскажу 400 Bad Request, наверное, правильно, но не зная, что это тыре "проверка», Это'невозможно сказать.

Что делать, если мы пытаемся подтвердить некоторые бизнес-проверки или правила. Metalhead
13

Вот:

rfc2616 # section-10.4.1 - 400 Bad Request

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

rfc7231 # section-6.5.1 - 6.5.1. ошибка 400, неверный запрос

Код состояния 400 (неверный запрос) указывает, что сервер не может или не будет обрабатывать запрос из-за того, что воспринимается как ошибка клиента(например, синтаксис неверно сформированного запроса, неправильное формирование кадра сообщения запроса или обманчивая маршрутизация запроса).

Относится к неправильным (не хорошо сформированным) случаям!

rfc4918 - 11,2. 422 необработанного объекта

Код состояния 422 (Unprocessable Entity) означает, что сервер

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

Заключение

Основное правило: [_] 00 охватывает наиболее общий случай и случаи, которые не охватываются указанным кодом.

422 лучше всего подходит ошибка проверки объекта (именно моя рекомендация :)

Что касаетсясемантически ошибочный - Придумай что-то вродеТакое имя пользователя уже существует" Проверка.

400 неправильно используется для проверки объекта

1

Там'Немного больше информации о семантике этих ошибок вRFC 2616, какие документы HTTP 1.1.

Лично я бы наверное использовал400 Bad Request, но это только мое личное мнение без какой-либо фактической поддержки.

255

Если "Ошибка проверки " означает, что в запросе есть какая-то ошибка клиента, затем используйте HTTP 400 (неверный запрос). Например, если предполагается, что URI имеет дату ISO-8601, и вы обнаружили, что она 'в неправильном формате или ссылается на 31 февраля, тогда вы вернете HTTP 400. То же самое, если вы ожидаете правильно сформированный XML в теле сущности, и он не может проанализировать.

(1/2016): за последние пять летWebDAV»Более конкретный HTTP 422 (Unprocessable Entity) стал очень разумной альтернативой HTTP 400. Смотрите, например, его использование вJSON API, Но обратите внимание, что HTTP 422 имеетне сделал это в HTTP 1.1,RFC-7231.

Ричардсон и РубиВеб-сервисы RESTful содержит очень полезное приложение о том, когда использовать различные коды ответов HTTP. Они говорят:

400 («Плохой запрос »)

Важность: высокая.

Это общее состояние ошибки на стороне клиента, используемое, когда другой код ошибки 4xx не подходит. Это'обычно используется, когда клиент отправляет представление вместе с запросом PUT или POST, и представление имеет правильный формат, но это нене имеет никакого смысла. (стр. 381)

а также:

401 («Несанкционированный»)

Важность: высокая.

Клиент пытался работать с защищенным ресурсом, не предоставив надлежащие учетные данные для аутентификации. Возможно, он предоставил неверные учетные данные или не указал их вообще. Учетные данные могут быть именем пользователя и паролем, ключом API или токеном аутентификации.что бы ни ожидала данная служба. Это'Обычно клиент делает запрос на URI и принимает 401, просто чтобы знать, какие учетные данные отправлять и в каком формате. [...]

@EdGraham 200 только для того, когда все успешно. Когда вы входите с неверными учетными данными или когда вы пытаетесь получить доступ к странице без надлежащей аутентификации, то это ошибка, и вам нужно показать какой-то код, чтобы пользователь знал, что произошла ошибка Zachary Weixelbaum
@ Кендзи, да, 401 («Несанкционированный»): "Возможно, предоставили неправильные полномочия ... » означает неверный пользователя и / или пароль. razzintown
Как утверждает @ReWrite, я также думаю, что 422 лучше для ошибок валидации. panteo
@ Джим, если имя пользователя & пароль - допустимая строка, но пользователь не знаетt существует или пароль неверный, в таком случае я должен вернуться400 или же401 ?? Так какOwin возвращает 400 в этом сценарии Kgn-web
21

Дубликат в базе данных должен быть.409 CONFLICT

Я рекомендую использовать422 UNPROCESSABLE ENTITY для ошибок проверки.

Я дам более подробное объяснение кодов 4xx здесь:http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/

Похожие вопросы