Skip to main content

A Django REST framework API adapter for the JSON:API spec.

Project description

Tests Read the docs PyPi Version

Overview

JSON:API support for Django REST framework

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:

  1. Support the JSON:API spec to compliance

  2. 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

  3. Have sane defaults to be as easy to pick up as possible

  4. Be solid and tested with good coverage

  5. Be performant

Requirements

  1. Python (3.8, 3.9, 3.10, 3.11, 3.12, 3.13)

  2. Django (4.2, 5.0, 5.1)

  3. Django REST framework (3.14, 3.15)

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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

djangorestframework_jsonapi-7.1.0.tar.gz (97.8 kB view details)

Uploaded Source

Built Distribution

djangorestframework_jsonapi-7.1.0-py2.py3-none-any.whl (128.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file djangorestframework_jsonapi-7.1.0.tar.gz.

File metadata

File hashes

Hashes for djangorestframework_jsonapi-7.1.0.tar.gz
Algorithm Hash digest
SHA256 487e4fe5a0590e655cb3af947c8cee7b54be8ced14a81aac53056f2c43a92343
MD5 45e22770d8da238111953f9e73ec64a5
BLAKE2b-256 4d70e2f183051ae6aa1d4dcae72cb3dd2c07d6863d457d33cdc8729f060be85e

See more details on using hashes here.

File details

Details for the file djangorestframework_jsonapi-7.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for djangorestframework_jsonapi-7.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 506d7179b6c2d29c4b7879afb4cadf8b0bb468accd40787491875ad680b4993a
MD5 cc074475656a2f8bf02f769a4fe344ce
BLAKE2b-256 32fa6226a488c672c96ae30b362a0c84373ec0de15782c3b9bc35489ef1e604f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page