Статус HTTP 424 или 500 для ошибки по внешней зависимости

Я пытаюсь создать службу с двумя зависимостями. Одна из зависимостей управляется изнутри, а вторая требует внешнего исходящего HTTP-вызова стороннего API. Последовательность требует обновления ресурса и последующего выполнения исходящего HTTP-вызова.

Итак, мой вопрос: какой правильный код статуса http нужно вернуть в случае сбоя на 2-м шаге?

Должен ли быть ответ 424 или 500 с текстом сообщения, объясняющим обнаруженную ошибку?

  • 424: Ошибка метода - указывает, что метод не был выполнен на конкретном ресурсе в пределах его области действия, потому что некоторая часть выполнения метода завершилась неудачно, что привело к прерыванию всего метода.
  • внутренняя ошибка сервера 500.

person geneqew    schedule 10.09.2013    source источник


Ответы (3)


Ошибка, о которой вы спрашиваете, произошла внутри самой службы, поэтому диапазон кода состояния 5xx является правильным выбором. 503 Service Unavailable идеально подходит для описанной вами ситуации.

Коды 5xx предназначены для того, чтобы сообщить клиенту, что, несмотря на то, что с запросом все в порядке, на сервере возникла какая-то проблема с его выполнением. С другой стороны, коды 4xx используются, чтобы сообщить клиенту, что он сделал что-то не так (и что сервер в порядке, спасибо). Разделы 10.4 и 10.5 спецификации HTTP 1.1 объясняют различные цели. кодов 4xx и 5xx.

Код состояния 424 определен в стандарте WebDAV и предназначен для случая, когда клиенту необходимо изменить то, что он работает - сервер здесь не испытывает никаких проблем.

person Andrew Herbert    schedule 10.09.2013
comment
Я считаю, что 502 или 504 должны быть правильной ошибкой HTTP, как упоминается в следующем комментарии @mustafaturan. Здесь внешняя зависимость не ответила. Таким образом, текущий сервер не должен считаться неисправным из-за недоступности обслуживания. Пожалуйста, поправьте меня, если я ошибаюсь. - person mwKART; 18.06.2020

Поскольку вторая операция - это вызов внешней службы, вы должны выбрать 502 или 504 в зависимости от ситуации.

Цитата по: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3

10.5.3 502 Bad Gateway

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

10.5.4 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.

10.5.5 Тайм-аут 504 для шлюза

Сервер, выступая в качестве шлюза или прокси, не получил своевременного ответа от вышестоящего сервера, указанного в URI (например, HTTP, FTP, LDAP) или какого-либо другого вспомогательного сервера (например, DNS), к которому он должен был получить доступ при попытке завершить запрос.

  Note: Note to implementors: some deployed proxies are known to
  return 400 or 500 when DNS lookups time out.
person mustafaturan    schedule 29.12.2015

503 Service Unavailable подходит, если проблема заключается в том, что сервер ожидает решения (например, если он получает 503 от вышестоящего сервера). 502 Bad Gateway следует использовать для неизвестных ошибок вышестоящего сервера, на которые вы не знаете, как реагировать.

person coppro    schedule 14.10.2015