![](/img/trans.png)
[英]Converting CallbackDataProvider offset and limit to Pageable page and size
[英]What pagination method is better for rest api's (page, size) or (limit, offset)
我搜索了許多堆棧溢出答案、文章,但無法對此有一個具體的想法,這就是我問這個問題的原因,
參考資料: 10 個更好的 RESTful 最佳實踐 API
我只是想知道當我們在 rest api 中進行分頁時我們應該使用什么,在 spring 框架中,他們默認提供(page,size)
來在 api 中實現分頁,我認為使用(page, size)
更易於閱讀和有意義而不是(limit, offset)
,為什么 spring 默認提供(page,size)
而不是 limit,offset 並且許多答案都是為了證明(limit,offset)
優於(page,size)
.
在 Page/PageSize vs Offset/Limit 中,使用 Page/PageSize 更簡單,因為每個 Pages 上的 PageSize 相等,但是如果您針對特定范圍的項目,則使用 Offset/Limit 可為您提供更精確的數據,並且您不能使用頁/頁大小方法。 下圖顯示了兩者之間的關系:
在第一個塊上,如果您的目標是項目 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 是您目標項目的數量。 我只是向您展示這兩種方法的關系。
例如,如果您不使用 spring,則在代碼中使用限制和偏移會更容易一些,您可以將這些值直接傳遞給 dbms。
在頁面和大小的情況下,您必須計算偏移和限制值。 如果是框架,它將為您完成工作。
但在我看來,沒有做到這一點的“最佳方法”。 這兩種解決方案都適用於多種情況。
我使用 page&limit 方法。 恕我直言,這些是參數的最佳名稱。 所以它會是這樣的:
https://somewhere.com/results?page=1&limit=10
我找不到關於“如何做”問題的任何明確答案。
我認為限制/大小更好,因為它為客戶提供了更多選擇。 他們可以請求任何一組結果。 缺點是客戶端需要計算偏移量。
頁面/大小很誘人,因為它對 ppl 來說更自然,也更容易讓客戶實施。 只要您不需要獲得 50 個結果,但忽略其中的前 25 個就可以了。 但如果你這樣做了——那就太糟糕了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.