如果没有可用数据,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 返回码应该是啥的主要内容,如果未能解决你的问题,请参考以下文章