Подтвердить что ты не робот

REST - Когда использовать 400 ( "Плохой запрос" )

У меня есть такой ресурс, как этот sales/customers/{customerno}. Если клиент отправляет запрос PUT на этот ресурс, я возвращаю 400 - неверный запрос, если xml в сущности тела недействителен xml. Но что, если xml действителен, но содержимое xml недопустимо. Скажем, например, что клиент пытается обновить клиентский PostCode и предоставляет PostCode, который недопустим. Правильно ли возвращать 400 - Плохой запрос в этом случае, или это еще один код http, который я должен был использовать?

4b9b3361

Ответ 1

Из Википедия Список кодов состояния HTTP:

400 Плохой запрос:Запрос не может быть выполнен из-за плохого синтаксиса.

В этом случае ваш клиент отправил вам полезную нагрузку XML с недопустимым почтовым индексом, который является формой недопустимого синтаксиса; поэтому отправка 400 Bad Request - это соответствующий код ошибки для возврата в этой ситуации.

Кроме того, Wikipedia цитирует RFC-4918 как ресурс по этой теме. Из этого документа вы найдете следующую информацию:

Серверы МОГУТ отклонять сомнительные запросы (хотя    они состоят из хорошо сформированного XML), например, с 400 (Bad    Request) и дополнительный модуль ответа, объясняющий    проблема.

Поскольку ваш запрос корректно сформирован (XML не плох, он просто содержит семантически некорректную информацию), вы можете отклонить контент с кодом состояния 400. Слово *may* указывает на наличие других параметров.

В то время как у вас может возникнуть соблазн использовать код состояния 422, это будет неверно в этой ситуации, поскольку недопустимый почтовый индекс не соответствует критериям, чтобы быть семантической ошибкой. Читайте ниже...

Из Википедии:

422 Непроцессная организация (WebDAV; RFC 4918):   Запрос был хорошо сформирован, но из-за семантических ошибок его не удалось выполнить.

Кроме того, вот некоторые определения чтобы помочь в интерпретации кода состояния 422:

  • Синтаксические ошибки возникают во время разбора входного кода и вызваны ошибочными по грамматике утверждениями. Типичные ошибки могут быть незаконным символом ввода, отсутствующим оператором, двумя операторами в строке, двумя операторами в одной строке без промежуточных точек с запятой, несбалансированными круглыми скобками, неправильным зарезервированным словом и т.д.

  • Семантические ошибки возникают во время выполнения кода после того, как он был проанализирован как грамматически правильный. Они должны делать не то, как построены утверждения, но и то, что они означают. Такие вещи, как неправильные типы или размеры переменных, несуществующие переменные, индексы вне диапазона и т.п., Являются семантическими ошибками.

Недопустимый почтовый индекс не является ни синтаксической ошибкой, ни семантической ошибкой; таким образом, разумно исключить код статуса 422 в качестве опции.

Чтобы ответить на ваш вопрос, код статуса 400 подходит; однако у вас могут быть и другие варианты.

Ответ 2

Пересмотренная версия спецификации HTTP, найденная здесь, обновила формулировку, чтобы попытаться избежать этой путаницы, когда 400 ограничивалось только искаженными запросами.

7.4.1. 400 Bad Request

Сервер не может или не будет обрабатывать запрос из-за клиента ошибка (например, искаженный синтаксис).