我正在尝试创建具有 2 个依赖项的服务。其中一个依赖项是内部管理的,而第二个依赖项需要对第三方 API 进行外部 http 出站调用。该序列需要更新资源,然后执行 http 出站调用。
所以我的问题是,如果第二步失败,返回的正确 http 状态代码是什么?
响应应该是 424 还是 500,并带有解释所遇到错误的消息正文?
更新: 请注意,在这个特定的用例中,使用我的服务的客户端不一定知道/不需要知道我公开的服务部分依赖于在第二步失败的外部 API。
您询问的故障是服务本身内部发生的故障,因此 5xx 状态代码范围是正确的选择。 503 Service Unavailable 看起来非常适合您所描述的情况。
5xx 代码用于告诉客户端即使请求没问题,服务器在满足请求时遇到了某种问题。另一方面,4xx 代码用于告诉客户端它做错了什么(并且服务器很好,谢谢)。 HTTP 1.1 规范的第 10.4 和 10.5 节解释了 4xx 和 5xx 代码的不同用途。
状态代码 424 在 WebDAV 标准 中定义,适用于客户端需要更改其正在执行的操作的情况 - 服务器在这里没有遇到任何问题。
由于二次操作是外部服务调用,请根据情况选择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.
503 Service Unavailable 如果问题是服务器希望得到缓解的问题(例如,如果它从上游服务器获得 503),则适用。 502 Bad Gateway 应用于来自上游服务器的未知错误,您不知道如何响应。