当依赖项/下游(如第三方API)失败时,使用什么HTTP状态代码?

当依赖项/下游(如第三方API)失败时,使用什么HTTP状态代码?,http,http-status-codes,Http,Http Status Codes,我们的API中有一个路由(调用时)会命中另一个第三方API e、 g HTTP-GET/account/1 这将从我们的数据库和..返回一些数据。。说。。第三方api,如Auth0/Okta/SalesForce/等等 现在,如果第三方api调用因任何原因失败(fails==4**,5**,甚至200 OK,但内容是一些错误消息),那么我应该向调用我的api的客户端传递什么错误状态代码 起初我想的是一个HTTP-500-Server-Error,但是。。。我现在不太确定,因为如果我将一条漂亮的错

我们的API中有一个路由(调用时)会命中另一个第三方API

e、 g

HTTP-GET/account/1

这将从我们的数据库和..返回一些数据。。说。。第三方api,如Auth0/Okta/SalesForce/等等

现在,如果第三方api调用因任何原因失败(fails==4**,5**,甚至200 OK,但内容是一些错误消息),那么我应该向调用我的api的客户端传递什么错误状态代码

起初我想的是一个
HTTP-500-Server-Error
,但是。。。我现在不太确定,因为如果我将一条漂亮的错误消息返回给客户端,我可以防止服务器中发生此错误。然后我想,返回一个
HTTP-200-OK
,其中包含下游问题/错误的一些键/值。。。但这真的可以吗(双关语)。对我来说,
HTTP-200-OK
就像返回的答案是真的OK

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

我觉得HTTP-500是针对那些已经发生但尚未真正得到处理和/或解释的错误的

现在,如果第三方api调用因任何原因失败(fails==4**,5**,甚至200 OK,但内容是一些错误消息),那么我应该向调用我的api的客户端传递什么错误状态代码

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


如果对下游服务器的请求阻止服务器满足客户端请求,则可以选择或。或者,您可以返回一些缓存数据(如果您有)并返回状态代码。

@Evert在编写此答案时,我试图建议
502
:表示服务器在充当网关或代理时,在尝试完成请求时从其访问的入站服务器收到无效响应。我实际上指的是502,而不是504=),因此我同意。因此,总结是:无论请求为何未完成。。。只是没有实现。因此,
http5xx
。IETF说:“
状态代码的5xx(服务器错误)类表示服务器意识到它犯了错误”(参考:)。这与IETF关于
4XX
状态的比较:“状态代码的4XX(客户端错误)类表示客户端似乎有错误。”(参考:)