空响应和未找到响应的HTTP状态代码

时间:2018-08-24 07:49:41

标签: rest api web-services httpresponse http-status-code-301

我们正在实现基于REST的Web服务,并且对某些用例有一些疑问。

考虑到有一个唯一的帐户,其中包含一些信息(例如,添加到购物车信息中)

  1. 如果没有购物车信息(例如0),我们应该返回什么响应代码。 我们的理解是返回200且返回值为空。
  2. 用户已将购物车信息添加到他的帐户,但购物车已被管理员删除。

应使用哪种HTTP状态代码?

2 个答案:

答案 0 :(得分:0)

对于情况1,有两种选择:

  1. 购物车是空的。我将返回200 OK,返回一个空集合。
  2. 购物车不存在。正确的情况是404。

对于情况2,它实际上是相同的。唯一的潜在差异是,如果您针对情况1返回了404,则可以选择410 gone,因为这表明以前有一辆购物车,但现在已经消失了。

无论选择哪种方式,我都建议您针对两种情况采用相同的策略。例如:要么为两个返回2xx代码,要么为两个返回4xx代码。

如果管理员通过发出DELETE请求删除购物车,则404/410状态代码更为合适。

答案 1 :(得分:0)

请参见This Blog。解释得很好。

博客对204的评论摘要:

  1. 204 No Content并不是非常有用的响应代码 浏览器(尽管根据HTTP规范,浏览器确实需要 将其理解为“请勿更改视图”响应代码。
  2. 204 No Content对ajax Web服务非常有用,它可能希望指示成功而不必返回 的东西。 (特别是在诸如DELETE或POST之类的情况下, 需要反馈)。

因此,对您的问题的答案是在您的情况下使用404。 204是专门的响应代码,您不应该经常返回浏览器来响应GET。

其他响应代码甚至比204和404更不合适。

  1. 200应该随您成功获取的内容一起返回。当您要提取的实体不存在时,此方法不合适。
  2. 服务器开始对某个对象进行工作但该对象尚未完全准备就绪时,将使用
  3. 202。当然这里不是这样。您尚未开始也不会开始响应GET请求构造用户9。这违反了各种规则。
  4. 400用于响应格式不正确的HTTP请求(例如,格式错误的http标头,顺序错误的段等)。几乎可以肯定,这将由您使用的任何框架来处理。除非您是从头开始编写自己的服务器,否则不必处理这个问题。编辑:Newer RFCs现在允许将400个用于语义无效的请求。

维基百科的description of the HTTP status codes特别有用。您还可以看到definitions in the HTTP/1.1 RFC2616 document at www.w3.org