Статус 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 следует использовать для неизвестных ошибок с восходящего сервера, где вы не знаете, как реагировать.