- Notifications
You must be signed in to change notification settings - Fork302
JSON:API support for Django REST framework
License
django-json-api/django-rest-framework-json-api
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
JSON API support for Django REST Framework
- Documentation:https://django-rest-framework-json-api.readthedocs.org/
- Format specification:http://jsonapi.org/format/
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 anidentity
model in JSON API format the response should looklike 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 } }}
As a Django REST Framework JSON API (short DJA) we are trying to address following goals:
Support theJSON API spec to compliance
Be as compatible withDjango 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
- Python (3.6, 3.7, 3.8, 3.9)
- Django (2.2, 3.0, 3.1, 3.2)
- Django REST Framework (3.12)
Wehighly 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.
$ 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']
$ git clone https://github.com/django-json-api/django-rest-framework-json-api.git$ cd django-rest-framework-json-api$ pip install -e .
It is recommended to create a virtualenv for testing. Assuming it is alreadyinstalled 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-JSONAPI 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.
rest_framework_json_api
assumes you are using class-based views in DjangoRest Framework.
One can either addrest_framework_json_api.parsers.JSONParser
andrest_framework_json_api.renderers.JSONRenderer
to eachViewSet
class, oroverridesettings.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 nestedserializers), relationships, links, paginators, filters, and handy shortcuts.Read more athttp://django-rest-framework-json-api.readthedocs.org/
About
JSON:API support for Django REST framework
Topics
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.