Skip to main content

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

Project description

https://travis-ci.org/django-json-api/django-rest-framework-json-api.svg?branch=develop Read the docs Join the chat at https://gitter.im/django-json-api/django-rest-framework-json-api

Overview

JSON API support for Django REST Framework

By default, Django REST Framework will produce a response like:

{
    "count": 20,
    "next": "http://example.com/api/1.0/identities/?page=3",
    "previous": "http://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": "http://example.com/api/1.0/identities",
        "self": "http://example.com/api/1.0/identities?page=2",
        "next": "http://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.5, 3.6, 3.7, 3.8)

  2. Django (1.11, 2.1, 2.2, 3.0)

  3. Django REST Framework (3.10, 3.11)

We highly recommend and only officially support the latest patch release of each Python, Django and REST Framework series.

Installation

From PyPI

$ pip install djangorestframework-jsonapi
$ # for optional package integrations
$ pip install djangorestframework-jsonapi['django-filter']
$ pip install djangorestframework-jsonapi['django-polymorphic']

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 .

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 -U -e . -r 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

Running Tests and linting

It is recommended to create a virtualenv for testing. Assuming it is already installed and activated:

$ pip install -Ur requirements.txt
$ flake8
$ pytest

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.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 http://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-3.1.0.tar.gz (69.0 kB view details)

Uploaded Source

Built Distribution

djangorestframework_jsonapi-3.1.0-py2.py3-none-any.whl (209.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file djangorestframework-jsonapi-3.1.0.tar.gz.

File metadata

  • Download URL: djangorestframework-jsonapi-3.1.0.tar.gz
  • Upload date:
  • Size: 69.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.8

File hashes

Hashes for djangorestframework-jsonapi-3.1.0.tar.gz
Algorithm Hash digest
SHA256 894826320cc9e06942b3f6e3604fc5c093854275fab498d52de4a3cd24aac58f
MD5 0777b655422574eb4f6425c8efa474a3
BLAKE2b-256 2fd3bc4d670717e366dfc7aa3abf081961c68fabca480473a91d07665a8d8508

See more details on using hashes here.

File details

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

File metadata

  • Download URL: djangorestframework_jsonapi-3.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 209.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.8

File hashes

Hashes for djangorestframework_jsonapi-3.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8d61bb16970e6c4b737b166c3888a319f86dad0321a41d801426d24a6ebd9fc7
MD5 144001ef2c010e59fb2cf76b4779c0da
BLAKE2b-256 5b4b3951b86d48a9d173549417be9a278547783919ad6182a7cfd9a098be2cdf

See more details on using hashes here.

Supported by

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