簡體   English   中英

對於 rest api 的 (page, size) 或 (limit, offset) 哪種分頁方法更好

[英]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) .

https://somewhere.com/results?page=1&size=20

https://somewhere.com/results?limit=20&offset=0

在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM