【问题标题】:HTTP Status Code for External Dependency Error外部依赖错误的 HTTP 状态码
【发布时间】:2014-08-20 06:47:23
【问题描述】:

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

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

【问题讨论】:

    标签: rest http http-status-codes


    【解决方案1】:

    您是否考虑过状态码 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.
    

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

    【讨论】:

      【解决方案2】:

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

      我认为状态代码 503: Service Unavailable 最适合您的情况。来自RFC description

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

      当然,该描述暗示此状态代码应该应用于服务器本身的错误(而不是表示与外部依赖关系的问题)。但是,这是最适合 RFC 状态代码的方式,我不建议使用任何自定义状态代码,以便任何人都可以理解它们。

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

      【讨论】:

        【解决方案3】:

        你可以参考这个链接。

        HTTP Status 424 or 500 for error on external dependency

        503 Service Unavailable 看起来非常适合这种情况。

        【讨论】:

          猜你喜欢
          • 2016-02-23
          • 2017-07-06
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          • 2014-02-02
          • 1970-01-01
          • 2021-01-02
          • 2015-08-29
          相关资源
          最近更新 更多