来自外部数据源的“无数据可用”的HTTP状态代码

时间:2012-03-07 02:51:02

标签: http rest http-status-codes

情境:

发送POST请求以处理将导致从外部数据源检索数据的订单。

有三种可能的结果:

  1. 数据源返回了请求的数据
  2. 没有可用于请求的数据(这被视为错误)
  3. 无法访问数据源(可能需要维护)
  4. 1 的明显响应是200: OK201: Created(根据此请求创建实体)。

    哪些状态代码适用于 2 3

    我考虑的状态代码:

      数据源停止时
    • 503: Service Unavailable
    • 数据源停止时
    • 500: Internal Server Error
    • 当“无数据可用”时,
    • 502: Bad Gateway 当“无数据可用”
    • 时,
    • 404: Not Found 当“无数据可用”
    • 时,
    • 403: Forbidden 当“无数据可用”
    • 时,
    • 412: Precondition Failed

4 个答案:

答案 0 :(得分:26)

3)我同意503这个

2)坦率地说,我认为在案例2中使用204可以做出一个很好的论据。您可以在标题中包含metainfo以明确指出“出错”。这实际上取决于您认为这种情况在API级别为“错误”的程度。

如果API本身按预期运行,并且请求是由经过身份验证和授权的用户发送到有效端点并且没有导致服务器出现故障,那么400或500系列错误中很少会出现错误应用。

例如,404通常意味着您调用的URI不存在,如果它确实存在,那么使用该代码至少会产生误导IMHO

**10.2.5 204 No Content**
     

服务器已完成请求但不需要返回   entity-body,可能想要返回更新的元信息。该   响应可能包括新的或更新的元信息形式   实体标题,如果存在,应该与...相关联   要求的变体。

     

如果客户端是用户代理,它不应该更改其文档视图   从导致请求发送的那个。这个回应是   主要是为了允许在没有的情况下进行动作的输入   但是,导致更改用户代理的活动文档视图   任何新的或更新的元信息应该应用于文档   目前在用户代理的活动视图中。

     

204响应绝不能包含消息体,因此总是如此   由标题字段后的第一个空行终止。

答案 1 :(得分:18)

2)回过头来看,我同意它可能应该是204 No Content,也可能是200,其中一个机构表示没有记录或资源可以找到,具体取决于返回的结构。 404通常在资源URI不存在时使用,或者在宁静服务的情况下找不到URI中的资源。

3)503服务不可用

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

  Note: The existence of the 503 status code does not imply that a
  server must use it when becoming overloaded. Some servers may wish
  to simply refuse the connection.

答案 2 :(得分:0)

HTTP 404-带有您自己的错误消息,例如“找不到数据”。

Twitter使用404。 参考:https://developer.twitter.com/en/docs/basics/response-codes.html

答案 3 :(得分:0)

我认为处理此问题的最佳方法是使用200个无结果对象。

为什么?

您的回答是,您可以做一些事而没有很多麻烦。我搜索了一下,一切正常,但是数据库中没有任何结果。因此,result = null和一条消息对此进行了解释。如果在网络中发现此问题,则不构成安全隐患。

如果您担心安全风险,那么204可能是最好的方法。

res.status(200).send({
   result: null,
   message: 'No result'
});