如果没有可用数据,http 返回码应该是啥

Posted

技术标签:

【中文标题】如果没有可用数据,http 返回码应该是啥【英文标题】:What http return code should be if no data available如果没有可用数据,http 返回码应该是什么 【发布时间】:2016-12-04 04:48:09 【问题描述】:

例如,我有一个 API 方法 /api/orders.getOrders,它实际上一直存在。 如果此方法没有返回以下格式的数据,我应该发送 404 还是 200 http 响应码?

"orders":[]

【问题讨论】:

我认为您应该考虑将您的 API 更改为 GET /api/orders 以获得对 REST 更友好的内容,然后您可以返回 200,因为资源存在,即使是空的。 404 表示您的资源不存在 ~= url 不正确 204。 @RonanQuillevere URI 如何或多或少对 REST 友好?请解释。 REST 对 URI 设计没有任何限制,HTTP 也是如此。资源必须是唯一可识别的,因此是 URI。所以请解释一下。 您不应在 URL 中使用动词,而应使用 HTTP 动词(GET、POST、PUT、DELETE ...)。我建议阅读:developer.pearson.com/sites/default/files/… @RonanQuillevere 我同意,从 URI 设计的角度来看,URI 不应包含动词,但从 REST 的角度来看,这并不重要,因为 REST 不是一种协议,而只是一种风格,因此没有规定如何URI 应该是这样的。作为人类,我们倾向于将语义放入某些路径段中,从计算机的角度来看,这只是一个更进一步的字符串。尽管在 URI 中使用了动词,但处理 URI 的服务可能仍然是 RESTful(取决于它是否尊重主要的 REST 约束并尊重 HTTP) uri 设计不是我的问题的重点。 【参考方案1】:

200 是正确的。

来自RFC 7231

4xx(客户端错误)类状态码表示客户端似乎出错了。

404(未找到)状态码表示源服务器没有找到目标资源的当前表示

在您的情况下,客户在请求资源时没有犯了错误;源服务器确实找到了资源的当前表示,因此 404(实际上,整个 4xx 类的响应)是不合适的。

204 is also wrong.

204(无内容)状态码表示服务器已成功完成请求,并且响应负载正文中没有要发送的其他内容。

“无内容”表示HTTP响应消息体为空,即返回的表示为0字节长。当返回空资源的非空表示时,这是不合适的。

【讨论】:

204 限制发送实体主体,没错。但是,在收到204 响应时,客户端已经知道该资源没有可用的数据。而不是为200 响应返回 "orders": [] 之类的东西,204 也没有任何实体是可行的。这进一步阻止了客户端解析响应正文,因为没有。

以上是关于如果没有可用数据,http 返回码应该是啥的主要内容,如果未能解决你的问题,请参考以下文章

返回过期密码的好的http状态码是啥?

服务器返回的http状态码是啥[重复]

浏览器中返回的状态码400是啥?

降级健康检查的 HTTP 状态码应该是啥?

getResponseCode获取URL响应状态码每次都是返回200是啥原因

REST 中成功的 DELETE 语句的 HTTP 状态返回码是啥?