🌟

Django REST framework JSON:API(DJA)を試す

2023/06/05に公開

概要

Django REST framework JSON:API(DJA)を試す機会がありましたので、その備忘録です。

https://django-rest-framework-json-api.readthedocs.io/en/stable/index.html

インストール

以下のページに記載があるexample appを起動します。

https://django-rest-framework-json-api.readthedocs.io/en/stable/getting-started.html

git clone https://github.com/django-json-api/django-rest-framework-json-api.git
cd django-rest-framework-json-api
python3 -m venv env
source env/bin/activate
pip install -Ur requirements.txt
django-admin migrate --settings=example.settings
django-admin loaddata drf_example --settings=example.settings
django-admin runserver --settings=example.settings

結果、以下の画面などが得られました。

デフォルト設定を試す

一覧

以下のURLにアクセスすると、blogの一覧が表示できました。

http://localhost:8000/blogs

ソート

画面の「Filters」ボタンから指定できますが、以下のURLにアクセスすると、nameに対して昇順の結果が得られます。

http://localhost:8000/blogs?sort=name

一方、マイナスをつけると、降順の結果が得られます。

http://localhost:8000/blogs?sort=-name

fields

fieldsで取得するattributesを指定できます。以下のようにアクセスすると、attributesが空になります。

http://localhost:8000/blogs?fields[blog]=aaa

取得する検索結果数を指定する

JsonApiPageNumberPagination

デフォルトの設定です。

以下にアクセスすると、2件のブログのうち、1件のブログが得られます。

http://localhost:8000/blogs?page[size]=1

numberを追加すると、次の1件が得られます。

http://localhost:8000/blogs?page[number]=2&page[size]=1

JsonApiLimitOffsetPagination

limitoffsetでページネーションを行う方法です。DEFAULT_PAGINATION_CLASSrest_framework_json_api.pagination.JsonApiLimitOffsetPaginationに変更します。

/django-rest-framework-json-api/example/settings/dev.py
...
    "DEFAULT_PAGINATION_CLASS": "rest_framework_json_api.pagination.JsonApiLimitOffsetPagination", # "rest_framework_json_api.pagination.JsonApiPageNumberPagination",  # noqa: B950
...

以下のURLで、はじめの1件を取得することができます。

http://localhost:8000/blogs?page[limit]=1

次のURLで2件目を取得できます。

http://localhost:8000/blogs?page[limit]=1&page[offset]=1

フィルタ

フィルタについては、別の記事で紹介したいと思います。

まとめ

json:apiの利用にあたり、参考になりましたら幸いです。

Discussion