REST API 状态代码分页

标签 rest http pagination api-design

我目前正在使用 Jersey Framework 编写 REST API。我遵循 HATEOAS 原则,用户只能通过我的响应正文或 header 中的给定链接在 api 中移动。在一些资源中,我实现了分页功能。不过,我想知道,当用户(HTTP 状态代码)不遵守我的界限并且就像随机发出请求时,我应该告诉用户什么(HTTP 状态代码),而请求的页面实际上是“越界”。目前我只是返回一个空集合,但我认为作为一个用户,我无法从这样的响应中得到什么。我考虑过使用状态代码“未找到”,但我不确定这是否合适。我真的很想忠于 REST,这意味着我忠于 HTTP。那么任何人都可以给我建议,甚至可以告诉我是否真的有解决我的问题的规则吗?

也许是一个具体的例子:

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

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

编辑: 如果请求的页面为“空”,我只是询问预期的响应。我知道固定页面大小的设计可能注定无法满足 future 的更改请求,但由于此 API 是微服务的一部分,因此不会有任何变化,除非我们团队内部发生争执:)

最佳答案

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

但是您应该考虑更改您的资源标识符 (URI)。根据 URL 参数返回 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 参数应该是最后的选择。

关于REST API 状态代码分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039983/

相关文章:

java - REST - 带有 JSON 的 HTTP Post Multipart

java - 如何找出缺少哪个 Java 类定义/要导入哪些依赖项?

spring-boot - Spring Boot 分页返回的值不一致

python - 在 Shopify 应用程序的 Django HttpResponse 对象中设置 Content-Type

elasticsearch - elasticsearch如何使用滚动获取以前的数据

angularjs - 使用带有分页功能的 Angular 过滤器

php - Symfony JSON 登录 - session 与 token

java - 如何阻止 java.net.http.HttpClient 发出升级请求?

java - 如何在Java中使用Rest-assured来使用多部分文件附件?

c# - 每次我下载文件时,WebClient 都会打开一个新连接,并且所有连接都保持建立状态