ページネーションについてZalando社のRESTful APIガイドラインを参考に考えてみる
restful-api-guidelines-ja.netlify.app
ページネーションとはリストデータへのアクセスの際に、総件数を上限件数で分割して、分割単位(ページ)毎に取り出せるようにすること
数百件以上になる可能性のあるリストの場合はページネーションをサポートすべき
やり方は2つ
- オフセットベース:最初のページエントリをオフセット数値で特定する
(Pros)何件目から取得するというシンプル方法。簡単なSQLで実装可能。100ページ中の51ページのように 特定のページにジャンプするようなユースケースでは有効。
(Cons)件数が増えると処理が重い。リストにレコードの増減がある場合、オフセットがずれ、重複やロスト、障害を起こす可能性がある。 - カーソルベース:単一のキー要素で最初のページエントリを特定する
(Pros)処理はより高速。リストにレコードの増減がある場合でも適切にページングできる(ただし、実装次第) (Cons)SQLが複雑になる。任意のページを表示するのが面倒。
効率を重視する場合、より高速な「カーソルベース」にすべきとガイドラインではいっている
カーソル(単一キー)はページの位置、ページネーションの方向、適用されたクエリフィルタを(暗号化)エンコードしたりするらしいが、それが煩わしくなければカーソルを検討してもよさそう
他参考
https://developers.facebook.com/docs/graph-api/using-graph-api/v2.4#paging