REST API状态代码分页

时间:2016-06-26 15:21:16

标签: rest http pagination api-design

我目前正在使用Jersey Framework编写REST API。我遵循HATEOAS原则,用户只应通过我的响应正文或标题中的给定链接移动api。在一些资源上,我实现了分页功能。我当时想知道,当他没有遵循我的界限时,我应该告诉用户(HTTP状态代码),并且就像随机发出请求,其中所请求的页面实际上是超出范围"。目前我只返回一个null集合,但我认为作为一个用户,我不能用这样的响应做出一些东西。我考虑使用状态代码" Not Found"但我不确定这是否合适。我真的想要忠于REST,这意味着我坚持使用HTTP。那么,任何人都可以给我建议,甚至告诉我是否确实存在我的问题规则?

也许是一个具体的例子:

  • 页面大小= 10;
  • Collection.size = 27;
  • 请求的页面= 4;
  • 分页从第0页开始

,因此请求http://...../resource?page=0,返回第一页。 我的问题是,我应该为请求http://...../resource?page=4返回什么?目前我只是返回null,但我不认为这是正确的回应。 提前致谢

编辑: 我只询问预期的响应,如果请求的页面是"空"。我知道固定的页面大小设计可能会注定未来的变更请求,但由于这个API是微服务的一部分,所以除了我们团队内部的斗争之外,没有任何东西:)

1 个答案:

答案 0 :(得分:-2)

404 not found是越界访问的适当返回码。

但您应该考虑更改资源标识符(URI)。根据网址参数返回404200并不是一个好设计。

将每个页面视为单一资源会更好。对于HATEOAS来说也是如此。

 .../resource/page/0  #200 + return link in header to next resource  .../resource/page/1
 .../resource/page/4  #404 + return link to first resource  .../resource/page/0)

如果没有其他工作(例如范围访问),则使用URL参数应该是最后一个选项。