我搜索了许多堆栈溢出的答案,文章,但没有得到一个具体的想法,这就是为什么我问这个问题,
参考:更好的RESTfulAPI的10个最佳实践
我只是想知道当我们在rest apis中进行分页时,我们应该使用什么,在Spring框架中,他们默认提供(page, size)
来实现apis中的分页,我认为使用(page,size)
更具人类可读性和意义,而不是(限制,偏移)
,Spring默认提供(page,size)
而不是限制,偏移和许多答案都是为了证明(限制,偏移)
比(page,size)
更好。
https://somewhere.com/results?page=1
https://somewhere.com/results?limit=20
在Page/PageSize vs Offset/Limit中,使用Page/PageSize更简单,因为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
在第二个块上,如果您的目标是项目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
在第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
实际上,偏移量是目标项目的起始索引,极限是目标项目的计数。我只是向您展示这两种方法的关系。
如果不使用Spring,Limit和offset在代码中更容易使用,例如,您可以将这些值直接传递给dbms。
对于页面和大小,您必须计算偏移和限制值。对于框架,它将为您完成工作。
但在我看来,没有“最好的方法”。两种解决方案都适用于多种情况。
我使用页面
https://somewhere.com/results?page=1&limit=10
关于“如何做”的问题,我找不到任何明确的答案。