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

Tre*_*ner 33 rest http http-status-codes

场景:

POST请求被发送到处理,这将导致数据检索来自外部数据源的命令.

有三种可能的结果:

  1. 数据源返回了请求的数据
  2. 没有可用于请求的数据(这被视为错误)
  3. 无法访问数据源(可能需要维护)

1的明显响应是200: OK201: Created(从此请求创建实体).

什么状态代码适合23

我考虑的状态代码:

  • 503: Service Unavailable 当数据源关闭时
  • 500: Internal Server Error 当数据源关闭时
  • 502: Bad Gateway 什么时候"没有数据可用"
  • 404: Not Found 什么时候"没有数据可用"
  • 403: Forbidden 什么时候"没有数据可用"
  • 412: Precondition Failed 什么时候"没有数据可用"

Chu*_*den 26

3)我同意503的意见

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

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

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

**10.2.5 204 No Content**
Run Code Online (Sandbox Code Playgroud)

服务器已完成请求但不需要返回实体主体,并且可能希望返回更新的元信息.响应可以包括实体标题形式的新的或更新的元信息,如果存在,应该与所请求的变体相关联.

如果客户端是用户代理,它不应该从导致请求发送的文档视图中更改它的文档视图.这种反应主要是为了允许操作发生而不引起改变到用户代理的活动文档视图的输入,尽管任何新的或更新的元信息应在用户代理的活动视图当前应用于该文档.

204响应绝不能包含消息体,因此总是在头字段之后的第一个空行终止.

  • 这似乎要处理的另一种"流行"方式是返回错误消息或带有200 HTTP状态代码的空响应.http://stackoverflow.com/questions/11402156/rest-status-code-204-on-paginated-result也触及了这一点. (5认同)

Dan*_*675 21

2)回顾这一点,我同意它可能应该是204 No Content或者可能是200,其中一个正文表示根据返回的结构没有记录或资源.当资源URI不存在或者在宁静服务的情况下未找到URI中的资源时,通常使用404.

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.
Run Code Online (Sandbox Code Playgroud)

  • 如果服务器在此资源处接受了请求,但没有数据可返回-那么404毫无意义。不幸的是,我认为这里没有一个明确的状态代码有意义,但是我倾向于更倾向于204(或者甚至是200的正文,它表示“数据不可用”)的答案。 (2认同)
  • 如果认为http请求失败,204肯定是错误的。 (2认同)