【问题标题】:What HTTP Status code to use when a dependency/downstream (like a 3rd party API) fails?当依赖/下游(如 3rd 方 API)失败时使用什么 HTTP 状态代码?
【发布时间】:2019-07-11 20:26:20
【问题描述】:

我们的 API 中有一个路由(在调用时)会访问另一个 3rd 方 API。

例如

HTTP-GET /account/1

这会从我们的数据库和 .. 比如说 .. 一个 Auth0/Okta/SalesForce/whatever 等第 3 方 api 返回一些数据。

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

最初我在想HTTP-500-Server-Error,但是...我现在不太确定,因为如果我将一个好的错误消息返回给客户。所以我想,返回一个HTTP-200-OK,其中包含下游问题/错误的一些键/值......但这真的 OK(双关语)。对我来说,HTTP-200-OK 就像返回的答案是真的 好的。

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

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

【问题讨论】:

    标签: http http-status-codes


    【解决方案1】:

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

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

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

    【讨论】:

    • @Evert 在写这个答案时,我很想建议502:表示服务器在充当网关或代理时,在尝试访问时从它访问的入站服务器收到了无效响应完成请求。
    • 我实际上是指 502,而不是 504 =) 所以是的,我同意
    • 好的 - 所以总结是:不管为什么请求没有被满足......它只是没有被满足。因此,HTTP 5XX。 IETF 说:“The 5xx (Server Error) class of status code indicates that the server is aware that it has erred”(参考:tools.ietf.org/html/rfc7231#section-6.6)。这与4XX 状态上的 IETF 相比:“`4xx(客户端错误)类状态代码表明客户端似乎出错了。'”(参考:tools.ietf.org/html/rfc7231#section-6.5
    猜你喜欢
    • 2010-12-29
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2021-11-26
    • 2011-05-04
    相关资源
    最近更新 更多