Код состояния HTTP для «нет данных» из внешнего источника данных - PullRequest
29 голосов
/ 07 марта 2012

Сценарий:

Отправляется запрос POST для обработки заказа, который приведет к извлечению данных из внешнего источника данных.

Есть три возможных результата:

  1. Источник данных вернул данные для запроса
  2. Нет данных для запроса (это рассматривается как ошибка)
  3. Не удалось получить доступ к источнику данных (может быть недоступен для обслуживания)

Очевидный ответ для 1 : 200: OK или 201: Created (объект создается из этого запроса).

Какие коды состояния подходят для 2 и 3 ?

Коды состояния, которые я рассмотрел:

  • 503: Service Unavailable когда источник данных не работает
  • 500: Internal Server Error когда источник данных не работает
  • 502: Bad Gateway когда «нет данных»
  • 404: Not Found когда «нет данных»
  • 403: Forbidden когда «данные отсутствуют»
  • 412: Precondition Failed когда "нет данных"

Ответы [ 3 ]

26 голосов
/ 16 апреля 2013

3) Я согласен с 503 для этого

2) Честно говоря, я думаю, что можно привести хороший аргумент в пользу использования 204 в случае 2. Вы можете включить metainfo в заголовок, чтобы указать, что именно «пошло не так». Это действительно зависит от того, насколько вы считаете этот случай «ошибкой» на уровне API.

Если сам API работает должным образом, и запрос был к действительной конечной точке, авторизованным и авторизованным пользователем, и не вызвал сбой сервера, то очень немногие из ошибок серии 400 или 500 действительно могут показаться применять.

например, 404 обычно означает, что вызываемый вами URI не существует, если он существует, то использование этого кода вводит в заблуждение, по крайней мере, ИМХО

**10.2.5 204 No Content**

Сервер выполнил запрос, но не должен возвращать entity-body и может захотеть вернуть обновленную метаинформацию. ответ МОЖЕТ включать новую или обновленную метаинформацию в форме Заголовки сущностей, которые в случае их наличия ДОЛЖНЫ быть связаны с запрашиваемый вариант.

Если клиент является пользовательским агентом, он НЕ ДОЛЖЕН изменять вид документа от того, что вызвало отправку запроса. Этот ответ в первую очередь предназначен для обеспечения возможности ввода действий без вызывая изменение в активном представлении документа агента пользователя, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документу в настоящее время в активном представлении агента пользователя.

Ответ 204 НЕ ДОЛЖЕН включать тело сообщения, и поэтому всегда заканчивается первой пустой строкой после полей заголовка.

19 голосов
/ 07 марта 2012

2) Оглядываясь назад, я согласен, что это, вероятно, должно быть либо 204 No Content, либо, может быть, 200 с телом, указывающим на отсутствие записей или ресурсов, в зависимости от возвращаемой структуры. 404 обычно используются, когда URI ресурса не существует или ресурс в URI не найден в случае службы восстановления.

3) 503 Сервис недоступен

Сервер в настоящее время не может обработать запрос из-за временной перегрузки или обслуживания сервера. Подразумевается, что это временное состояние, которое будет смягчено после некоторой задержки. Если известно, длина задержки МОЖЕТ быть указана в заголовке Retry-After. Если Retry-After не задано, клиент ДОЛЖЕН обработать ответ так же, как и для ответа 500.

  Note: The existence of the 503 status code does not imply that a
  server must use it when becoming overloaded. Some servers may wish
  to simply refuse the connection.
0 голосов
/ 03 февраля 2019

HTTP 404 - с вашим собственным сообщением об ошибке типа "Данные не найдены".

Твиттер использует 404. Справка: https://developer.twitter.com/en/docs/basics/response-codes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...