0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PageNumberPagenationとLimitOffsetPagenation | Django REST Flamework

Posted at

Django REST Flameworkのよく使うページネーションPageNumberPagenationとLimitOffsetPagenationの違いについて公式ドキュメントを見てもよくわからないことが多いので、比較してまとめていきます。

公式ドキュメント:Pagination

レスポンスのかたち

レスポンスの形は両者共に同じで、以下のような構造で渡ってきます。

{
    "count": 53,
    "next": "http://api.example.com/resources/?page=3",
    "previous": "http://api.example.com/resources/?page=1",
    "results": [
        { "id": 11, "name": "..." },
        { "id": 12, "name": "..." }
    ]
}

違いはクエリパラメータ

PageNumberPagenationは?page=1が使える

PageNumberPagenationは、クエリパラメータにpage=を渡すことでページの指定ができます。

クラスパラメータは以下があり、継承して上書きして使えます。

  • page_size: デフォルトの1ページ件数。None ならページング無効。
  • page_query_param: ページ番号を指定するクエリパラメータ。デフォルトは "page"。
  • page_size_query_param: ページサイズをクライアントが指定できるようにするかどうか。
  • max_page_size: 最大取得件数

以上を使うと以下のようにpagenation_classを定義して使うことができます。

class MyPagination(PageNumberPagination):
    page_size = 20 # デフォの所得件数
    page_size_query_param = "page_size" # page_sizeのクエリパラメータで取得件数をクライアントサイドから変更可能
    max_page_size = 100 # 取得件数の上限値

LimitOffsetPagenationは?limit=10&offset=20が使える

LimitOffsetPagenationは、その名の通りlimitと、offsetのクエリパラメータを指定することができます。
クエリパラメータで以下を指定できます。

  • limit = 取得件数
  • offset = 何件目から始めるか

たとえば、1ページ20件で、41件目から表示したいという場合は?limit=20&offset=41と表します。
PageNumberPagenationに比べると少し概念が複雑になりますが、1ページの件数を細かく指定することができるので便利で、しかもPageNumberPagenationよりも動作が軽いので大量にレコードがある時におすすめです。

クラスパラメータは以下があり、継承して上書きして使えます。

  • default_limit: limit が指定されなかった場合のデフォルト件数
  • limit_query_param / offset_query_param: クエリパラメータ名
  • max_limit: クライアントが指定できる最大件数の上限。大きすぎるリクエストを制御できる
  • templete: APIブラウザUIで利用されるだけのブラウザレンダリング時のページコントロール用テンプレート
    以上を使うと以下のようにpagenation_classを定義して使うことができます。
class MyPagination(LimitOffsetPagination):
    default_limit = 50 # デフォの所得件数
    max_limit = 200 # 取得件数の上限値
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?