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

gen*_*qew 46 rest http-status-codes

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

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

如果响应是424或500,并且消息正文解释了遇到的错误?

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

And*_*ert 44

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

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

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

  • 我相信 502 或 504 应该是正确的 HTTP 错误,正如 @mustafaturan 在下一条评论中提到的。这里外部依赖没有响应。因此,当前服务器不必因服务不可用而被标记为故障。如果我错了,请纠正我。 (3认同)

mus*_*ran 25

由于第二个操作是外部服务呼叫,您应根据情况选择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.
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)


cop*_*pro 8

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