Какой соответствующий код состояния HTTP возвращается службой REST API при сбое проверки?

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

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

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

 insign17 мая 2018 г., 14:38
Я думаю, что 401 более понятен.
 ruffin13 янв. 2017 г., 15:01
Фуив, Кенниссылка предлагает код 422, как Джимответ теперьниже, #TheMoreYouKnow #SavingYouAClick
 Kenny Meyer26 нояб. 2012 г., 11:25
Проверьте этот ответ:stackoverflow.com/a/2657624/221612

Ответы на вопрос(7)

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

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

 java_geek07 окт. 2014 г., 12:05
Я бы порекомендовал 422 - Unprocessable Entity для ошибок проверки более 400 - Bad Request

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

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

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

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

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

 Metalhead20 июл. 2017 г., 15:30
Что делать, если мы пытаемся подтвердить некоторые бизнес-проверки или правила.

Вот:

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 неправильно используется для проверки объекта

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

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

Решение Вопроса

Если "Ошибка проверки " означает, что в запросе есть какая-то ошибка клиента, затем используйте 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, просто чтобы знать, какие учетные данные отправлять и в каком формате. [...]

 Zachary Weixelbaum05 авг. 2018 г., 17:52
@EdGraham 200 только для того, когда все успешно. Когда вы входите с неверными учетными данными или когда вы пытаетесь получить доступ к странице без надлежащей аутентификации, то это ошибка, и вам нужно показать какой-то код, чтобы пользователь знал, что произошла ошибка
 panteo03 февр. 2015 г., 11:34
Как утверждает @ReWrite, я также думаю, что 422 лучше для ошибок валидации.
 Kgn-web03 мар. 2017 г., 11:11
@ Джим, если имя пользователя & пароль - допустимая строка, но пользователь не знаетt существует или пароль неверный, в таком случае я должен вернуться400 или же401 ?? Так какOwin возвращает 400 в этом сценарии
 Stijn de Witt02 июн. 2015 г., 02:14
скажу, что это неправильно. 400 Bad Request используется, когда в запросе синтаксически что-то не так. Я'Я бы сказал, что ReWrite правильно рекомендует 422, которая осодержание запроса.
 Jim Ferrans11 апр. 2018 г., 21:59
@ZacharyWeixelbaum СогласноWebDAV spec, вы должны использовать 422 вместо 400, так что различие между WebDAV и HTTP не 'для вас это не имеет значения, тогда наверняка продолжайте и используйте 422. Но вы никогда не должны возвращать 422 вместо 401. Возвращать 422 вместо 401 всегда неправильно
 Kenji14 июн. 2016 г., 12:18
401 одинаков для неправильного пользователя и пароля?
 manu04 апр. 2013 г., 16:26
Но, вероятно, если недопустимый формат URI, 404 может быть более подходящим.
 Zachary Weixelbaum29 мар. 2018 г., 19:28
Согласно спецификации, это должна быть ошибка 422, а не 400/401
 razzintown30 нояб. 2016 г., 19:12
@ Кендзи, да, 401 («Несанкционированный»): "Возможно, предоставили неправильные полномочия ... » означает неверный пользователя и / или пароль.
 Ed Graham05 авг. 2018 г., 10:30
@ZacharyWeixelbaum - если выречь идет конкретно отолько страница входатогда ты неКод 4xx вообще не нужен, потому что операция прошла успешно. Вы зашли на страницу входа, ввели неверные учетные данные и получили соответствующее сообщение об ошибке. Вы увидели страницу, которую вы просили: HTTP 200.
 Ed Graham11 авг. 2018 г., 10:49
@ZacharyWeixelbaum - я с уважением не согласен. Поиск, который не дает результатов, может или не может быть успешным; но он все равно должен вернуть HTTP 200, как этоЭто действительный сценарий использования средства поиска. Точно так же я бы сказал, что вход в систему с неверными учетными данными является допустимым вариантом использования; пользователи с добрыми намерениями будут иногда делать это. Они выиграли'Однако не пытайтесь получить доступ к защищенным страницам без входа в систему, что заслуживает 401. В ASP.NET (например), код возврата не-200 вызывает исключение и, следовательно, обрабатывается. Это н'Желательно для частых событий.
 Zachary Weixelbaum12 апр. 2018 г., 17:13
Ошибки @JimFerrans 400 предназначены для случаев, когда синтаксис указан неверно. Ошибки 401 возникают, в частности, если я пытаюсь получить доступ к странице, на которой мне нужно войти, чтобы получить доступ, и я не вошел в систему вообще. 422 ошибки для того, где синтаксис правильный, но сервер отказывает в обслуживании. Неверное имя пользователя / пароль - правильный синтаксис (не ошибка 400), и я не пытаюсь получить доступ к странице, для которой мне нужно войти, потому что я получаю доступ к самой странице входа (не ошибка 401). Ошибка 401 должна использоваться для чего-то вроде страницы настроек, к которой имеет доступ только пользователь

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

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

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

Ваш ответ на вопрос