dependency/downstream(比如第 3 方 API)失败时使用什么 HTTP 状态代码?

What HTTP Status code to use when a dependency/downstream (like a 3rd party API) fails?

我们的 API 中有一条路线(当调用时)到达另一个第 3 方 API。

例如

HTTP-GET /account/1

这 return 是我们数据库中的一些数据以及来自.. 比如说 .. 第三方 api,例如 Auth0/Okta/SalesForce/whatever。

现在,如果这个第 3 方 api 调用由于任何原因失败(失败 == 4**、5** 甚至 200 OK 但内容是一些错误消息)那么错误状态代码是什么我应该传回客户端调用 my API?

最初我想 HTTP-500-Server-Error 但是......我现在不太确定因为我 可以 防止服务器中发生此错误,如果我 return 一个很好的错误信息返回给客户。所以后来我想,return 一个 HTTP-200-OK 其中包含下游 issue/error 的一些 key/value ... 但是这个 真的 好吗(双关语)。对我来说,HTTP-200-OK 就像 returned 的答案 真的 可以。

所以我不确定人们在这种情况下会做什么。

我觉得 HTTP-500 是针对发生但尚未真正处理的错误 and/or。

Now, if this 3rd party api call fails for any reason (fails == 4**, 5** or even a 200 OK but the content is some error message) then what error status code should I pass back to the client calling my API?

API应该从消费者的角度来设计。在大多数情况下,API 消费者不会关心请求是否由他们向其发出请求的服务器或由下游服务器完成。

如果对下游服务器的请求阻止您的服务器完成客户端请求,您可以获取500 or 503. Alternatively you could return some cached data (if you have any) and return a 2xx状态代码。