Automated generation of real Swagger/OpenAPI 2.0 schemas for JSON API Django Rest Framework endpoints.
Project description
drf-yasg-json-api - drf-yasg meets JSON API
Automated generation of Swagger/OpenAPI 2.0 JSON API specifications from Django Rest Framework endpoints.
This package makes drf-yasg Yet Another Swagger Generator and Django REST framework JSON API play together.
Table of Contents
- Compatibility
- Installation
- Quickstart
- Features
- Coexistence of JSON API views with pure REST API views
Compatibility
-
Django REST Framework JSON API:
2.8,3.0,3.1,3.2,4.0,4.1,4.2,4.3,5.0 -
Drf-yasg:
1.16,1.17.0,1.17.1,1.20 -
Django REST Framework:
3.8,3.9,3.10,3.11,3.12,3.13 -
Django:
2.0,2.1,2.2,3.0,3.1,3.2,4.0 -
Python:
3.6,3.7,3.8,3.9
Installation
pip install -U drf-yasg-json-api
Quickstart
First follow drf-yasg quickstart, then extend the configuration in following way.
Extending drg-yasg configuration
Assuming you are using drf-yasg configuration like below (which is drf-yasg default):
SWAGGER_SETTINGS = {
'DEFAULT_AUTO_SCHEMA_CLASS': 'drf_yasg.inspectors.SwaggerAutoSchema',
'DEFAULT_FIELD_INSPECTORS': [
'drf_yasg.inspectors.CamelCaseJSONFilter',
'drf_yasg.inspectors.RecursiveFieldInspector',
'drf_yasg.inspectors.ReferencingSerializerInspector',
'drf_yasg.inspectors.ChoiceFieldInspector',
'drf_yasg.inspectors.FileFieldInspector',
'drf_yasg.inspectors.DictFieldInspector',
'drf_yasg.inspectors.JSONFieldInspector',
'drf_yasg.inspectors.HiddenFieldInspector',
'drf_yasg.inspectors.RelatedFieldInspector',
'drf_yasg.inspectors.SerializerMethodFieldInspector',
'drf_yasg.inspectors.SimpleFieldInspector',
'drf_yasg.inspectors.StringDefaultFieldInspector',
],
'DEFAULT_FILTER_INSPECTORS': [
'drf_yasg.inspectors.CoreAPICompatInspector',
],
'DEFAULT_PAGINATOR_INSPECTORS': [
'drf_yasg.inspectors.DjangoRestResponsePagination',
'drf_yasg.inspectors.CoreAPICompatInspector',
],
}
Apply following changes:
SWAGGER_SETTINGS = {
'DEFAULT_AUTO_SCHEMA_CLASS': 'drf_yasg_json_api.inspectors.SwaggerAutoSchema', # Overridden
'DEFAULT_FIELD_INSPECTORS': [
'drf_yasg_json_api.inspectors.NamesFormatFilter', # Replaces CamelCaseJSONFilter
'drf_yasg.inspectors.RecursiveFieldInspector',
'drf_yasg_json_api.inspectors.XPropertiesFilter', # Added
'drf_yasg_json_api.inspectors.JSONAPISerializerSmartInspector', # Added
'drf_yasg.inspectors.ReferencingSerializerInspector',
'drf_yasg_json_api.inspectors.IntegerIDFieldInspector', # Added
'drf_yasg.inspectors.ChoiceFieldInspector',
'drf_yasg.inspectors.FileFieldInspector',
'drf_yasg.inspectors.DictFieldInspector',
'drf_yasg.inspectors.JSONFieldInspector',
'drf_yasg.inspectors.HiddenFieldInspector',
'drf_yasg_json_api.inspectors.ManyRelatedFieldInspector', # Added
'drf_yasg_json_api.inspectors.IntegerPrimaryKeyRelatedFieldInspector', # Added
'drf_yasg.inspectors.RelatedFieldInspector',
'drf_yasg.inspectors.SerializerMethodFieldInspector',
'drf_yasg.inspectors.SimpleFieldInspector',
'drf_yasg.inspectors.StringDefaultFieldInspector',
],
'DEFAULT_FILTER_INSPECTORS': [
'drf_yasg_json_api.inspectors.DjangoFilterInspector', # Added (optional), requires django_filter
'drf_yasg.inspectors.CoreAPICompatInspector',
],
'DEFAULT_PAGINATOR_INSPECTORS': [
'drf_yasg_json_api.inspectors.DjangoRestResponsePagination', # Added
'drf_yasg.inspectors.DjangoRestResponsePagination',
'drf_yasg.inspectors.CoreAPICompatInspector',
],
}
Renderers and parsers
JSON API schema of your view's response or request will be generated if you use django-rest-framework-json-api's
JSONAPIRenderer or JSONAPIParser respectively.
But since you have already used them to render or parse, not just to generate schema (haven't you?), you probably only need to alter the configuration as described above.
That's it!
Features
Fields and query params extraction follows Django REST framework JSON API.
Main request/response JSON API schema support:
-
datafield withid,type,relationships,attributesstructureSchema based on view's main serializer. It accessed through view's
get_serializermethod, the same waydrf-yasgdoes it.Use
GenericAPIVieworAPIViewand defineget_serializermanually.Fields and their source:
id–idfield or other serializer field that matches the modelpkfield or in-the-fly generated serializer field for modelpktype– serializer's model JSON API resource name or view's resource name, the same way Django REST framework JSON API does itrelationships– all serializer fields ofRelatedFieldandManyRelatedFieldclassattributes– all other serializer fields
-
includedfield andincludequery paramSchema based on serializers defined in
included_serializerattribute of view's main serializer where each one is treated in the same way as view's main serializer (datafield). -
filterquery paramIf view uses
django_filters.DjangoFilterBackendas filter backend, schema offilter[]query param will be generated based on view'sfilterset_fieldsattribute. -
pagination
If view uses
JsonApiPageNumberPaginationorJsonApiLimitOffsetPaginationaspagination_class, schema oflinksandmeta, consistent with those pagination types, will be generated.
Additional
Support for swagger_auto_schema decorator of drf-yasg
JSON API schema is also generated for success responses (statuses 2XX) defined manually using responses argument
of swagger_auto_schema decorator.
Stripping write_only fields from response and read_only from request
drf_yasg_json_api.inspectors.InlineSerializerSmartInspector strips fields inaccessible in request/response to
provide view of fields that are really available to use.
You can revert to traditional drf-yasg view of all serializer fields in both response and request by replacing this
inspector with drf_yasg_json_api.inspectors.InlineSerializerInspector
Extra x-writeOnly and x-readOnly properties
drf_yasg_json_api.inspectors.XPropertiesFilter uses:
x-readOnlyto mark read only fields even if they are nestedx-witeOonlyadds missing support for write only fields
Coexistence of JSON API views with pure REST API views
JSON API docs will be generated by drf_yasg_json_api.inspectors.JSONAPISerializerInspector,
non JSON API views are ignored by this inspector.
Pure REST API docs will be generated by drf-yasg inspectors – either
drf_yasg.inspectors.ReferencingSerializerInspector or drf_yasg.inspectors.InlineSerializerInspector depending on
which one you prefer to use.
RecursiveField
RecursiveField follows different approach from JSON API, so it cannot be used with
JSONAPISerializerInspector, but you can still have pure REST API views that will be documented
using ReferencingSerializerInspector.
Alternatively, instead of RecursiveField you can use included_serializers
with self (e.g. included_serializers = {'related-obj': 'self'}) to implement limited in depth recursion
the JSON API way.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file drf-yasg-json-api-0.9.1.tar.gz.
File metadata
- Download URL: drf-yasg-json-api-0.9.1.tar.gz
- Upload date:
- Size: 27.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a868e31da65c018c951fd720eadf70c6a889091dc710f044451ef6276fa03e8
|
|
| MD5 |
6ca6d8660442a21f61b1a757077ad17f
|
|
| BLAKE2b-256 |
946147d77b088335fe509fad381edd1e839cd7afd052b075a760230c4d3fc917
|
File details
Details for the file drf_yasg_json_api-0.9.1-py3-none-any.whl.
File metadata
- Download URL: drf_yasg_json_api-0.9.1-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee9107743eab495db3cad4b0e48198ecfe43335ea00ec83214161498ab4735c2
|
|
| MD5 |
084ab438313018cce6ed77559451d8b0
|
|
| BLAKE2b-256 |
8a6557837e139b023f480807c0b4a83b0922d6d168f3ca5516eb799c4c19dc82
|