空表的正确REST响应?

IMB*_*IMB 95 api rest http

比方说,你想通过调用来获得用户的列表getapi/users,但目前该表已被截断,所以没有用户.什么是这种情况下适当的反应404还是204

ton*_*edz 217

我不会说.

为什么不404(未找到)?

404状态代码应保留用于未找到资源的情况.在这种情况下,您的资源是用户的集合.此集合存在,但它目前是空的.就个人而言,如果我有200一天和404第二天只是因为有人碰巧删除了几个用户,我会非常困惑作为您的应用程序的客户的作者.我应该做些什么?我的网址错了吗?有人更改了API并忽略了重定向.

为什么不204(没有内容)?

这是w3c对204状态代码描述的摘录

服务器已完成请求但不需要返回实体主体,并且可能希望返回更新的元信息.

虽然在这种情况下这似乎是合理的,但我认为这也会使客户感到困惑.A 204应该表示某些操作已成功执行,并且不需要返回任何数据.这非常适合作为对DELETE请求的响应,或者可能触发一些不需要返回数据的脚本.在这种情况下api/users,您通常希望收到您的用户集合的代表.一次发送响应主体而不是另一次发送响应主体是不一致的并且可能具有误导性.

我为什么要用200(OK)

由于上面提到的原因(一致性),我将返回一个空集合的表示.我们假设您正在使用XML.非空用户集合的正常响应主体可能如下所示:

<users>
  <user>
    <id>1</id>
    <name>Tom</name>
  </user>
  <user>
    <id>2</id>
    <name>IMB</name>
  </user>
</users>
Run Code Online (Sandbox Code Playgroud)

如果列表为空,你可以回复这样的事情(同时仍然使用a 200):

<users/>
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,客户端都会收到一个遵循某种众所周知的格式的响应主体.没有不必要的混淆和状态代码检查.此外,没有违反状态代码定义.大家都很开心.

您可以使用JSON或HTML或您正在使用的任何格式执行相同操作.

  • 肯定同意。对于 REST,我会简单地用一个空数组发回 200 的状态代码:`[]`。 (4认同)

Rom*_*nko 14

我会根据运行时情况回答两个代码中的一个:

404(未找到)

如果你没有桌子,这个答案是非常正确的.不只是空表而且没有USER TABLE.它证实了确切的想法 - 没有资源.进一步的选择是提供更多细节为什么你的桌子不存在,有几个更详细的代码,但404非常好参考你真的没有桌子的情况.

200(好的)

您拥有表但是空的所有情况或您的请求处理器筛选出所有结果.这意味着'您的请求是正确的,一切正常但您不匹配任何数据只是因为我们没有数据或我们没有与您的请求匹配的数据.这应该与安全拒绝答案不同.我也投票在有一些数据的情况下返回200,一般情况下你可以访问表但无法访问与你的请求匹配的所有数据(由于对象级别的安全性,数据被过滤掉了,但一般来说你被允许请求).


gee*_*eek 9

如果您期望用户对象列表,最好的解决方案是返回空列表([])而不是使用404或204响应.

  • 这是已接受答案的重复,但解释较少。 (3认同)

小智 9

肯定会返回200。

404 表示未找到资源。但资源是存在的。另外,如果响应有 404 状态。您如何知道用户列表为空或已满?


  • '/users' 如果为空应返回 '200'。
  • 如果未找到 id,则为“/users/1”。应该返回 404。

  • 这是已接受答案的重复,但解释较少。 (2认同)

Ami*_*aza 7

如果列表为空,则必须为200 OK 。

原因:空表是指该表存在但没有任何记录。

404 Not Found表示请求的端点不存在。

  • 这是已接受答案的重复,但解释较少。 (2认同)