2016-11-05 3 views
3

Каков правильный код ошибки HTTP, если идентификатор, указанный в теле, не существует?Правильный код ошибки HTTP, если идентификатор, переданный в теле, не существует/недействителен?

Пример: CityId 123 не существует в базе данных

POST /profiles 
{ 
    "name":"foo", 
    "cityId":123 
} 

ли 404? 400? или 422?

+0

Посмотрите: http://www.codingpedia.org/ama/error-handling-in-rest-api-with-jersey/ – Fusseldieb

ответ

3

Это до вас, в конце концов, но я бы сказал, 422.

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

http://www.restpatterns.org/HTTP_Status_Codes/400_-_Bad_Request

404 означает, что URL запросили, не существует. Ресурс (т. Е. Конечная точка веб-службы) существует. Я мог бы предложить другой ответ, если идентификатор был частью URL-адреса, то есть в строке запроса. 404s ссылаются на URL только в моем опыте, а не на POSTed тела. Также обратите внимание, что ссылка ниже относится к 404s только в контексте URL-адреса, а не о содержимом тела POST.

http://www.restpatterns.org/HTTP_Status_Codes/404_-_Not_Found

Поэтому это оставляет 422 в качестве единственного действующего кандидата.

http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity

Другой плакат предложил 204, но это неверно, так как запрос был обработан, но не был успешным. Все коды состояния 2 ** подразумевают некоторый уровень успеха.

http://www.restpatterns.org/HTTP_Status_Codes/204_-_No_Content

-2

Я бы сказал, 404, представьте себе, пытаясь получить доступ к URL, как www.domain.com/profile/35 и что не существует, можно было бы ожидать 404, поэтому я считаю, что должна работать так же.

+1

URL ('/ profiles') хорош, это полезная нагрузка POST (контент), который содержит необработанные данные. – Andreas

-2

Использование 404. Вы также можете просмотреть код состояния 204. На приведенной ниже ссылке есть хорошее объяснение на том же самом.

https://benramsey.com/blog/2008/05/http-status-204-no-content-and-205-reset-content/

+2

URL ('/ profiles') хорош, это полезная нагрузка POST (контент), которая содержит необработанные данные. – Andreas

+0

Итак, в этом случае правильный код состояния будет 422, верно? – Samay

2

Вы используете RESTful веб-службы на основе HTTP, так что вы должны следовать спецификации HTTP (RFC 7231, RFC 4918, RFC 2616).

  • 400 Bad Request

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

  • 404 Not Found

    Код состояния 404 (Не найдено) указывает на то, что сервер происхождения сделал не найти текущее представление для целевого ресурса или не готовы раскрыть, что она существует.Код статуса 404 не указывает, является ли это отсутствие представления временным или постоянным; код статуса 410 (Gone) предпочтительнее, чем 404, если сервер происхождения знает, по-видимому, с помощью некоторых настраиваемых средств, что условие условие, вероятно, будет постоянным.

    и старше, но более ясно, см RFC 2616:

    Сервер ничего совпадающий с Request-URI не найден. Не указывается, является ли это условие временным или постоянным. Код состояния 410 (Gone) ДОЛЖЕН использоваться, если сервер через какой-то механизм, который может быть внутренне конфигурирован, знает, что старый ресурс постоянно недоступен и не имеет адреса пересылки. Этот код состояния обычно используется, когда сервер не хочет точно определить, почему запрос был отклонен, или когда другой ответ не применим.

  • 422 Unprocessable Entity

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

Я хотел бы сказать, лучший код состояния соответствия HTTP 422, так как URI существует, синтаксис запроса является правильным, но семантически ошибочным.

Смежные вопросы