外部依赖性错误的HTTP状态代码

时间:2014-08-20 06:47:23

标签: rest http http-status-codes

当服务器与外部API通信时出现问题时,返回的正确HTTP状态代码是什么?

假设客户端向我的服务器A,A发送有效请求,然后查询服务器B的API以执行某些操作。但是B的API目前正在抛出500或者某种程度上无法访问,应该返回客户端的状态代码是什么? 5 *错误似乎不正确,因为服务器A正常运行,并且4 *错误似乎不正确,因为客户端正在向A发送有效请求。

3 个答案:

答案 0 :(得分:22)

您是否考虑过状态代码502504

502 – The server while acting as a gateway or a proxy, 
received an invalid response from the upstream server it accessed
in attempting to fulfill the request.

504 – The server, while acting as a gateway or proxy, 
did not receive a timely response from the upstream server 
specified by the URI (e.g. HTTP, FTP, LDAP) 
or some other auxiliary server (e.g. DNS) it needed to access 
in attempting to complete the request.

当然,这需要对应用于应用层的“网关”(需要调用接口B的接口A的实现)进行广泛的解释。但这可能是一个很好的说法:“我不能回答,但这不是我的错也不是你的。”

答案 1 :(得分:20)

由于API依赖于某些不可用的东西,因此它的服务也不可用。

我认为状态代码 503:服务不可用最适合您的情况。来自RFC description

  

由于服务器临时过载或维护,服务器当前无法处理请求。这意味着这是一个暂时的条件,经过一段时间的延迟后会得到缓解。如果已知,则可以在Retry-After报头中指示延迟的长度。如果没有给出Retry-After,客户端应该像处理500响应一样处理响应。

当然,该描述意味着该状态代码应该应用于服务器本身的错误(而不是表示外部依赖的问题)。但是,这是RFC状态代码中的最佳选择,我不建议使用任何自定义状态代码,以便任何人都能理解它们。

或者,如果您的API支持一种沟通错误的方式(例如,告诉用户他提供的ID不正确),您可以使用此方法告诉用户该依赖项不可用。这可能会更友好,可能会避免在用户方面进行一些错误搜索,因为至少有一些用户不熟悉除403,404和500之外的任何状态代码,具体取决于您的观众。

答案 2 :(得分:1)

您可以参考此链接。

HTTP Status 424 or 500 for error on external dependency

503服务不可用看起来非常适合这种情况。