比方说,你想通过调用来获得用户的列表GET
来api/users
,但目前该表已被截断,所以没有用户。什么是这种情况下适当的反应:404
或204
?
/api/users
当一个约/api/users/1
。
比方说,你想通过调用来获得用户的列表GET
来api/users
,但目前该表已被截断,所以没有用户。什么是这种情况下适当的反应:404
或204
?
/api/users
当一个约/api/users/1
。
Answers:
我不会说。
404状态代码应保留给找不到资源的情况。在这种情况下,您的资源是users的集合。该集合存在,但当前为空。就个人而言,如果我有200
一天和404
第二天只是因为有人碰巧删除了几个用户,作为您的应用程序的客户端作者,我会很困惑。我应该做些什么?我的网址错误吗?是否有人更改了API并忽略了重定向。
这是w3c对204状态码的描述的摘录
服务器已完成请求,但不需要返回实体,可能要返回更新的元信息。
尽管在这种情况下这似乎是合理的,但我认为这也会使客户感到困惑。204
假定A 表示某些操作已成功执行,并且不需要返回任何数据。这非常适合作为对DELETE
请求的响应,或者可以触发一些不需要返回数据的脚本。对于api/users
,您通常希望收到用户集合的表示。一次发送响应正文,而另一次不发送响应正文,可能会引起误解。
由于上述原因(一致性),我将返回一个空集合的表示形式。假设您正在使用XML。用于非空用户集合的普通响应正文可能如下所示:
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
如果列表为空,则您可以使用以下内容进行响应(同时仍使用200
):
<users/>
无论哪种方式,客户端都会收到遵循某种众所周知的格式的响应正文。没有不必要的混乱和状态代码检查。同样,没有违反状态码定义。大家都开心
您可以对JSON或HTML或所使用的任何格式进行相同的操作。
[]
。
GET /singleCoin
- 从口袋里返回随机的单个硬币,GET /severalCoins
- 从口袋里返回一些您可以一次抓取的硬币。可以说您现在口袋里没有硬币。当你问的时候GET /singleCoin
你会得到404 Not Found
,但是当你问的时候GET /severalCoins
你会得到200 OK
空名单[]
。一个事实-您没有硬币,用不同的答案描述,为什么?我想说最好总是404 Not Found
拿出来,因为口袋里没有硬币。
GET /severalCoins
。如果您要求GET /severalCoins
必须返回一些硬币,那么它就不应为200,因为它不合适。服务器无法提供客户端所需的内容。对于/singleCoin
这一点,因为客户想要的是一个硬币,没有更多的,没少是显而易见的。这与相同/coins/7
。与/coins
端点相反,通常客户期望没有硬币,一个硬币或多个硬币。他们都是有效的回应。如果没有硬币,那就是他们想要的。就像List<Coin>
Java中的emply一样,而不是null
。
我会根据运行时情况回答以下两个代码之一:
404(未找到)
如果您没有桌子,这个答案是非常正确的。不仅是空表,而且没有用户表。它证实了确切的想法-没有资源。进一步的选项是为了提供更多详细信息,为什么您的表不存在,有几个更详细的代码,但是404非常适合用来指代您实际上没有表的情况。
200(确定)
在所有具有表但表为空或请求处理器过滤掉所有结果的情况下。这意味着“您的请求是正确的,一切都很好,但是您不匹配任何数据,仅仅是因为我们没有数据或没有与您的请求匹配的数据。这应该与安全拒绝答案不同。在有一些数据的情况下,我也投票决定返回200,通常情况下,您可以访问表,但不能访问与您的请求匹配的所有数据(由于对象级安全性,数据已被过滤掉,但通常,您可以请求)。
空列表必须为200 OK。
原因:空表意味着该表存在,但没有任何记录。
404 Not Found表示请求的端点不存在。