分页结果上的REST状态代码204

时间:2012-07-09 19:55:14

标签: rest pagination http-status-codes

我正在设计一个类似于REST的API,用于基于YUI的客户端的分页数据检索。 对于GET请求,REST URL如下所示:

/app/catalog/data?startIndex=<int>&results=<int>&sort=<sting>&dir=<string>

所有参数都是可选的,即如果没有给出参数,则将转储来自DB的所有数据。 现在说数据库中只有1000条记录。按照以下要求进行:

/app/catalog/data?startIndex=1100&results=25

如果请求没问题,如果数据库的分页结果仍然为空,我应该返回什么状态代码?!我无法确定这是204还是404

生成的媒体类型是JSON和CSV。

4 个答案:

答案 0 :(得分:8)

我认为204是最合适的。请求成功,但没有结果。

10.2.5 204 No Content

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.

听起来和案件完全一样。

答案 1 :(得分:7)

  

我无法确定这是204还是404

都不是。只需返回200一个空结果(空XML文档或JSON数组,无论你使用什么)。通常我使用带有分页视图的REST服务,因此结果页面返回总记录数。这将有助于客户实现错误。但从技术上讲,这没有错。

使用204进行DELETE次操作(实际上没有内容可以返回)和PUT

BTW(大胆的矿井):

  

如果没有给出参数,将转储来自DB的所有数据

相信,你不想这样做......

答案 2 :(得分:1)

您通常以什么格式返回结果?我倾向于让这204或甚至200返回一个空列表。

答案 3 :(得分:1)

由于有效负载,分页响应中的HTTP 204不可行。分页时,您应该返回分页信息,例如,返回的项目,总项目,偏移量等,这是HTTP 204所不允许的。

我会使用以下之一:

  • HTTP 200的count = 0且返回列表中没有项目。
  • HTTP 400,因为调用程序要求输入的网址无效
  • HTTP 404,因为找不到要返回的项目

选择最适合您的API工作方式的一种。 我认为在这种情况下返回错误(4xx +错误信息)是安全的,因为以下假设之一可以超出偏移量:

  • 编码错误
  • 调用者从一开始就没有获取数据(没有新状态)
  • 调用者忽略了分页数据(出现在每个响应中)