Package: djangorestframework-jsonapi
OverviewJSON:API support for Django REST frameworkDocumentation: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 anidentitymodel 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}}}GoalsAs a Django REST framework JSON:API (short DJA) we are trying to address following goals:Support theJSON:APIspec to complianceBe as compatible withDjango REST frameworkas possiblee.g. issues in Django REST framework should be fixed upstream and not worked around in DJAHave sane defaults to be as easy to pick up as possibleBe solid and tested with good coverageBe performantRequirementsPython (3.7, 3.8, 3.9, 3.10, 3.11)Django (3.2, 4.0, 4.1, 4.2)Django REST framework (3.13, 3.14)Wehighlyrecommend 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.InstallationInstall usingpip…$pipinstalldjangorestframework-jsonapi$# for optional package integrations$pipinstalldjangorestframework-jsonapi['django-filter']$pipinstalldjangorestframework-jsonapi['django-polymorphic']$pipinstalldjangorestframework-jsonapi['openapi']or from source…$gitclonehttps://github.com/django-json-api/django-rest-framework-json-api.git$cddjango-rest-framework-json-api$pipinstall-e.and addrest_framework_json_apito yourINSTALLED_APPSsetting belowrest_framework.INSTALLED_APPS=[...'rest_framework','rest_framework_json_api',...]Running the example appIt is recommended to create a virtualenv for testing. Assuming it is already
installed and activated:$gitclonehttps://github.com/django-json-api/django-rest-framework-json-api.git$cddjango-rest-framework-json-api$pipinstall-Urrequirements.txt$django-adminmigrate--settings=example.settings$django-adminloaddatadrf_example--settings=example.settings$django-adminrunserver--settings=example.settingsBrowse tohttp://localhost:8000for 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, orhttp://localhost:8000/openapifor the schema view’s OpenAPI specification document.Usagerest_framework_json_apiassumes you are using class-based views in Django
REST framework.SettingsOne can either addrest_framework_json_api.parsers.JSONParserandrest_framework_json_api.renderers.JSONRendererto eachViewSetclass, or
overridesettings.REST_FRAMEWORKREST_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 athttps://django-rest-framework-json-api.readthedocs.org/