Max*_*ode 9 java rest spring hyperlink hateoas
我搜索了很多堆栈溢出的答案、文章,但无法得到具体的想法,这就是我问这个问题的原因,
参考资料:更好的 RESTful API 的 10 个最佳实践
我只是想知道,当我们在rest api中进行分页时,我们应该使用什么,在spring框架中,他们(page,size)默认提供在api中实现分页,我认为使用(page, size)更具有人类可读性并且更有意义,而不是(limit, offset),有什么原因吗spring 默认提供(page,size)而不是 limit,offset 并且许多答案都是为了证明它(limit,offset)比(page,size).
LEM*_*ANE 11
在 Page/PageSize 与 Offset/Limit 中,使用 Page/PageSize 更简单,因为所有 Page 的 PageSize 都是相同的;但是,如果您针对特定范围的项目,则使用 Offset/Limit 可以为您提供更精确的数据,而使用 Page/PageSize 方法则无法做到这一点。下图展示了两者之间的关系:
在第一个块中,如果您的目标是第 6 项到第 8 项,则您的 PageSize 为 3:
Limit = PageSize = 3
Page = 3 // from the first block above, item 6 to item 8 sits on Page 3
Offset = (Page * PageSize) - PageSize
Offset = (3 * 3) - 3
Offset = 6
Run Code Online (Sandbox Code Playgroud)
在第二个块上,如果您的目标是第 7 项到第 9 项,那么您的 PageSize 再次为 3:
Limit = PageSize = 3
Page = 3.3333 // from the 2nd block, item 7 to item 9 sits exactly in Page = 3.3333, and not in Page = 3
Offset = (Page * PageSize) - PageSize
Offset = (3.3333 * 3) - 3
Offset = 9.9999 - 3
Offset = 7
Run Code Online (Sandbox Code Playgroud)
在第 3 个块上,您的目标是第 7 项到第 10 项,因此您的 PageSize = 4:
Limit = PageSize = 4
Page = 2.75 // from the 3rd block, item 7 to item 9 sits exactly in Page = 2.75, and not in Page 3, if the PageSize is 4
Offset = (Page * PageSize) - PageSize
Offset = (2.75 * 4) - 4
Offset = 11 - 4
Offset = 7
Run Code Online (Sandbox Code Playgroud)
显然,偏移量是目标项目的起始索引,限制是您的目标项目的数量。我只是向您展示这两种方法的关系。
例如,如果您不使用 spring,则在代码中使用 limit 和 offset 会更容易一些,您可以将这些值直接传递给 dbms。
对于页面和尺寸,您必须计算偏移量和限制值。如果是框架,它会为您完成工作。
但在我看来,没有“最好的方法”。两种解决方案都适用于多种情况。
| 归档时间: |
|
| 查看次数: |
18641 次 |
| 最近记录: |