【问题标题】:REST API Status Code PaginationREST API 状态码分页
【发布时间】:2016-06-26 15:21:16
【问题描述】:

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

也许是一个具体的例子:

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

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

编辑: 我只是在请求的页面为“空”的情况下询问预期的响应。我知道固定页面大小的设计可能注定了未来的变更请求,但由于这个 API 是微服务的一部分,所以不会有,除非我们团队内部有争执:)

【问题讨论】:

标签: rest http pagination api-design


【解决方案1】:

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 参数应该是最后一个选项。

【讨论】:

  • 这显然是不标准的,因为当客户想要更改偏移量或页面大小时,这会让他们的生活变得困难。当并非所有客户都以这些术语思考时,它还将它们限制为“页面”概念。
  • @EricStein,如果您使用的是非固定页面大小,则必须通过 URL 参数访问资源分页,但如果您使用的是固定页面大小,则通过页面访问绝对没问题,恕我直言正确的概念。
  • @PaulWasilewski 在需求发生变化并且您需要支持可变页面大小之前,它工作得很好。那么它要么是一个丑陋的黑客 (GET /page/0?size=25),要么是一个重大的变化。
  • 是的,就是今天。不过,明天,这是一个重大变化。您正在对可能会发生变化的需求做出永久性决定。
  • @PaulWasilewski OP 没有提到页面大小是明确固定的。他说这里是一个具体的例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
相关资源
最近更新 更多