我搜索了很多堆栈溢出的答案,文章,但对此一无所知,这就是为什么我问这个问题,
参考文献:10 Best Practices for Better RESTful API
我只是想知道在其余api中进行分页时应该使用什么,
在spring框架中,他们默认提供(page,size)
以在api中实现分页,我认为使用(page, size)
更具可读性,并且比(limit, offset)
更有意义,spring是否提供了任何理由?默认情况下,(page,size)
而非限制,偏移量,许多答案都证明(limit,offset)
比(page,size)
更好。
答案 0 :(得分:2)
在Page / PageSize与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
在第三个区块上,您将第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
很可能Offset是目标项目的起始索引,Limit是目标项目的计数。我只是向您展示这两种方法的关系。
答案 1 :(得分:1)
例如,如果您不使用spring,则限制和偏移量在代码中更容易使用,可以将这些值直接传递给dbms。
对于页面和大小,您必须计算偏移和限制值。如果是框架,它将为您完成工作。
但是我认为,没有做到这一点的“最佳方法”。两种解决方案都适用于多种情况。
答案 2 :(得分:1)
我使用page&limit方法。恕我直言,这些是参数的最佳名称。所以它会像这样:
https://somewhere.com/results?page=1&limit=10
我找不到关于“如何做”问题的明确答案。