外部依赖错误的 HTTP 状态 424 或 500

问题描述 投票:0回答:3

我正在尝试创建具有 2 个依赖项的服务。其中一个依赖项是内部管理的,而第二个依赖项需要对第三方 API 进行外部 http 出站调用。该序列需要更新资源,然后执行 http 出站调用。

所以我的问题是,如果第二步失败,返回的正确 http 状态代码是什么?

响应应该是 424 还是 500,并带有解释所遇到错误的消息正文?

  • 424: Method Failure - 表示该方法未在其范围内的特定资源上执行,因为该方法的某些部分执行失败导致整个方法中止。
  • 500:内部服务器错误。

更新: 请注意,在这个特定的用例中,使用我的服务的客户端不一定知道/不需要知道我公开的服务部分依赖于在第二步失败的外部 API。

rest http-status-codes
3个回答
97
投票

您询问的故障是服务本身内部发生的故障,因此 5xx 状态代码范围是正确的选择。 503 Service Unavailable 看起来非常适合您所描述的情况。

5xx 代码用于告诉客户端即使请求没问题,服务器在满足请求时遇到了某种问题。另一方面,4xx 代码用于告诉客户端它做错了什么(并且服务器很好,谢谢)。 HTTP 1.1 规范的第 10.4 和 10.5 节解释了 4xx 和 5xx 代码的不同用途。

状态代码 424 在 WebDAV 标准 中定义,适用于客户端需要更改其正在执行的操作的情况 - 服务器在这里没有遇到任何问题。


54
投票

由于二次操作是外部服务调用,请根据情况选择502或504。

引自:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3

10.5.3 502 错误网关

服务器在充当网关或代理时,从它访问的上游服务器收到无效响应以尝试完成请求。

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.

17
投票

503 Service Unavailable 如果问题是服务器希望得到缓解的问题(例如,如果它从上游服务器获得 503),则适用。 502 Bad Gateway 应用于来自上游服务器的未知错误,您不知道如何响应。

© www.soinside.com 2019 - 2024. All rights reserved.