カーソルベースページネーションのモックレスポンス
nextCursorとhasMoreフィールドを含むカーソルベースのページネーションJSONレスポンスを生成。無限スクロールやリアルタイムフィードの実装に。
Pagination
詳細な説明
カーソルベースページネーション
カーソルベースのページネーションは、ページ番号の代わりにデータセット内の位置を示す不透明なポインター(カーソル)を使用します。リアルタイムフィード、無限スクロール、大規模データセットに推奨されるページネーション戦略です。
レスポンス構造
{
"data": [
{ "id": "uuid", "title": "string", "createdAt": "date" }
],
"pagination": {
"nextCursor": "eyJpZCI6IjEyMzQifQ==",
"hasMore": true,
"limit": 20
}
}
カーソル vs オフセットページネーション
| 側面 | オフセット | カーソル |
|---|---|---|
| ページNへジャンプ | 可能 | 不可 |
| 挿入との整合性 | なし | あり |
| 大規模でのパフォーマンス | 低下 | 一定 |
| 実装の複雑さ | シンプル | 中程度 |
カーソルの仕組み
カーソルは通常、最後のアイテムのソートキーをBase64エンコードした表現です(例:{ "id": "1234" }や{ "createdAt": "2026-01-15T..." })。サーバーはカーソルをデコードし、WHERE id > :cursor ORDER BY id LIMIT :limitクエリパターンで使用します。
カーソルがフィードに適している理由
リストの先頭に新しいアイテムが追加される場合(ソーシャルフィードなど)、オフセットベースのページネーションではアイテムがシフトします。「ページ2」にいるユーザーが重複を見たり、アイテムを見逃す可能性があります。カーソルはデータ内の固定点を参照するため、これを回避します。
フロントエンド統合
無限スクロールの場合、クライアントはnextCursor値を保存し、次のリクエストでクエリパラメータとして渡します:GET /api/feed?cursor=eyJpZ...&limit=20。hasMoreがfalseの場合、追加のリクエストは不要です。
ユースケース
無限スクロールフィード、チャットアプリケーション、アクティビティストリームを構築するフロントエンド開発者が、バックエンドなしでカーソルベースのページネーションロジックを実装・テストするために使用できます。