API 設計 中階

API 分頁設計:Offset vs Cursor-based Pagination 如何選擇?

AI 練習作答

API 分頁設計

Offset-based Pagination

GET /api/posts?offset=20&limit=10

✅ 簡單直覺,支援跳頁 ❌ 大資料量效能差(OFFSET N 需掃描前 N 筆) ❌ 資料新增/刪除時產生漏資料或重複資料

Cursor-based Pagination(推薦)

GET /api/posts?cursor=eyJpZCI6MTAwfQ&limit=10

Cursor 通常是上一頁最後一筆的 ID 或時間戳(Base64 編碼)

✅ 效能穩定,不受資料量影響 ✅ 即時資料不會漏資料或重複 ❌ 無法跳頁(只能上一頁/下一頁)

Keyset Pagination(Cursor 的變形)

GET /api/posts?after_id=100&limit=10

利用索引欄位(ID、created_at)直接過濾,SQL 查詢效率高

選擇指南

需求 建議
後台管理列表、支援跳頁 Offset
Feed、Timeline、無限滾動 Cursor / Keyset
大資料量 API Cursor / Keyset

回應格式(以 Cursor 為例)

{ data: [...], next_cursor: "...", has_more: true }

面試加分:Cursor Pagination 的 cursor 不應暴露內部 ID,應 Base64 或加密後回傳。

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分