Django REST framework JSON:API(DJA)を試す
概要
Django REST framework JSON:API(DJA)を試す機会がありましたので、その備忘録です。
インストール
以下のページに記載があるexample appを起動します。
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
結果、以下の画面などが得られました。
- http://localhost:8000 for the list of available collections (in a non-JSON:API format!),
- http://localhost:8000/swagger-ui/ for a Swagger user interface to the dynamic schema view, or
- http://localhost:8000/openapi for the schema view’s OpenAPI specification document.
デフォルト設定を試す
一覧
以下のURLにアクセスすると、blogの一覧が表示できました。
ソート
画面の「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件が得られます。
JsonApiLimitOffsetPagination
limit
とoffset
でページネーションを行う方法です。DEFAULT_PAGINATION_CLASS
をrest_framework_json_api.pagination.JsonApiLimitOffsetPagination
に変更します。
...
"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