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

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

Итак, мой вопрос: в случае неудачи на втором этапе возвращается правильный код состояния http?

Если ответ будет 424 или 500 с телом сообщения, объясняющим возникшую ошибку?

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

Ответ 1

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

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

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

Ответ 2

В качестве второй операции используется внешний вызов службы, вы должны выбрать 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.

Ответ 3

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