A Django REST framework API adapter for the JSON:API spec.
Project description
Overview
JSON:API support for Django REST framework
Documentation: https://django-rest-framework-json-api.readthedocs.org/
Format specification: https://jsonapi.org/format/
By default, Django REST framework will produce a response like:
{ "count": 20, "next": "https://example.com/api/1.0/identities/?page=3", "previous": "https://example.com/api/1.0/identities/?page=1", "results": [{ "id": 3, "username": "john", "full_name": "John Coltrane" }] }
However, for an identity model in JSON:API format the response should look like the following:
{ "links": { "prev": "https://example.com/api/1.0/identities", "self": "https://example.com/api/1.0/identities?page=2", "next": "https://example.com/api/1.0/identities?page=3", }, "data": [{ "type": "identities", "id": "3", "attributes": { "username": "john", "full-name": "John Coltrane" } }], "meta": { "pagination": { "count": 20 } } }
Goals
As a Django REST framework JSON:API (short DJA) we are trying to address following goals:
Support the JSON:API spec to compliance
Be as compatible with Django REST framework as possible
e.g. issues in Django REST framework should be fixed upstream and not worked around in DJA
Have sane defaults to be as easy to pick up as possible
Be solid and tested with good coverage
Be performant
Requirements
Python (3.7, 3.8, 3.9, 3.10)
Django (2.2, 3.2, 4.0)
Django REST framework (3.12, 3.13)
We highly recommend and only officially support the latest patch release of each Python, Django and REST framework series.
Generally Python and Django series are supported till the official end of life. For Django REST framework the last two series are supported.
For optional dependencies such as Django Filter only the latest release is officially supported even though lower versions should work as well.
Installation
Install using pip…
$ pip install djangorestframework-jsonapi $ # for optional package integrations $ pip install djangorestframework-jsonapi['django-filter'] $ pip install djangorestframework-jsonapi['django-polymorphic'] $ pip install djangorestframework-jsonapi['openapi']
or from source…
$ git clone https://github.com/django-json-api/django-rest-framework-json-api.git $ cd django-rest-framework-json-api $ pip install -e .
and add rest_framework_json_api to your INSTALLED_APPS setting below rest_framework.
INSTALLED_APPS = [ ... 'rest_framework', 'rest_framework_json_api', ... ]
Running the example app
It is recommended to create a virtualenv for testing. Assuming it is already installed and activated:
$ git clone https://github.com/django-json-api/django-rest-framework-json-api.git $ cd django-rest-framework-json-api $ 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
Browse to
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.
Usage
rest_framework_json_api assumes you are using class-based views in Django REST framework.
Settings
One can either add rest_framework_json_api.parsers.JSONParser and rest_framework_json_api.renderers.JSONRenderer to each ViewSet class, or override settings.REST_FRAMEWORK
REST_FRAMEWORK = { 'PAGE_SIZE': 10, 'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler', 'DEFAULT_PAGINATION_CLASS': 'rest_framework_json_api.pagination.JsonApiPageNumberPagination', 'DEFAULT_PARSER_CLASSES': ( 'rest_framework_json_api.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser' ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework_json_api.renderers.JSONRenderer', 'rest_framework_json_api.renderers.BrowsableAPIRenderer', ), 'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata', 'DEFAULT_FILTER_BACKENDS': ( 'rest_framework_json_api.filters.QueryParameterValidationFilter', 'rest_framework_json_api.filters.OrderingFilter', 'rest_framework_json_api.django_filters.DjangoFilterBackend', 'rest_framework.filters.SearchFilter', ), 'SEARCH_PARAM': 'filter[search]', 'TEST_REQUEST_RENDERER_CLASSES': ( 'rest_framework_json_api.renderers.JSONRenderer', ), 'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json' }
This package provides much more including automatic inflection of JSON keys, extra top level data (using nested serializers), relationships, links, paginators, filters, and handy shortcuts. Read more at https://django-rest-framework-json-api.readthedocs.org/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for djangorestframework-jsonapi-5.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 090c568dc99380ead71cc378020b4cd191db2ffce9ab3e9339df80d5d82c8648 |
|
MD5 | 1e981def5fce9e6a4f5fb0423f27387a |
|
BLAKE2b-256 | ab893fbc1a1d8d4173afc85064fe6d8664eebe6490a96984c0e05506b6ad84d8 |
Hashes for djangorestframework_jsonapi-5.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f25b0d24a990690e578668b7a7a191a75162f1d9561abd773d12de331cf16673 |
|
MD5 | 35e200a49bebd2097fe4a5d70d759d11 |
|
BLAKE2b-256 | 3a6e04d3cf825dd741c701d5a5b0f70d87f0e5702b62adc628852aaea18d7b23 |