PIK DRF openapi extensions
Project description
PIK OPENAPI Tools
Some PIK protocol DRF openapi extensions:
- inspection
- Schema version fetching from
RELEASE
env variable. - Schema title generation as
f'{settings.SERVICE_TITLE} API'
. - Components schemas generation from ModelSerializers.
- Schema description fetching from
settings.SERVICE_DESCRIPTION
SerializerMethodField
type hint introspection.- type field
enum
- model introspection:
-
label
astitle
help_text
asdescription
label
asx-title-plural
- correct
ListField
item typing - choice labels as
x-enumNames
- deprecated fields marking
NullBooleanField
type fix- Type hints for
SerializerMethodField
JSONField
schema- inspect filters for list endpoint only
- Schema customization with
update_schema
property or method - Operation labels & description
- RESTQL parameter schema
- Schema version fetching from
- etc
- Automatic camelCase translation
- schema
- filters
- params
- restql
- PIK OpenID Schema
- Automatic camelCase translation
- renderers
- CachedRenderer mixin - returns pre-rendenred file if exists:
- replaces "/" with "_" to get filename
/api/v1/schema/
searches{STATIC_ROOT}/_api_v1_schema_.html
/api/v1/schema/?format=openapi
searches{STATIC_ROOT}/_api_v1_schema_.yaml
/api/v1/schema/?format=openapi.json
searches{STATIC_ROOT}/_api_v1_schema_.json
- JSONOpenPrettyRenderer
- RedocOpenAPIRenderer
- CachedRenderer mixin - returns pre-rendenred file if exists:
- generateopenapi management command
Installation
- Add
pik_openapi
toINSTALLED_APPS
insettings.py
INSTALLED_APPS = [
...
'pik_openapi',
]
- Setup default schema inspector class with
settings.py
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'core.api.openapi.openapi.PIKAutoSchema',
...
}
- Setup schema url with
urls.py
from core.api.openapi.views import get_pik_schema_view
router_api_v1 = DefaultRouter()
api_v1_path = [path(
'api/v1/', include((router_api_v1.urls, 'api_v1')))]
urlpatterns = [
*api_v1_path,
path('api/v1/schema/',
get_pik_schema_view(
title=f'API Schema',
patterns=api_v1_path),
name='api_v1_schema'),]
Usage
- Redoc schema is available at /api/v1/schema/ and /api/v1/schema/?format=redoc
- Json schema format available at /api/v1/schema/?format=openapi-json
- YAML schema format available at /api/v1/schema/?format=openapi
- Generate pre-rendered json schema file:
./manage.py generateopenapi \
--format=openapi-json \
--urlpatterns=_project_.urls.api_v1_path \
> ${STATIC_ROOT}/_api_v1_schema_.json
- Generate pre-rendered openapi schema file:
./manage.py generateopenapi \
--format=openapi \
--urlpatterns=_project_.urls.api_v1_path \
> ${STATIC_ROOT}/_api_v1_schema_.yaml
- Generate redoc bundle with redoc-cli
redoc-cli bundle
${STATIC_ROOT}/_api_v1_schema_.json \
--output ${STATIC_ROOT}/_api_v1_schema_.html \
--options.showExtensions=true
Features
Schema Customization
Serializer schema customization
Inject schema customization, through update_schema
dict:
class MySerializer(ModelSerializer):
update_schema = {
'properties': {
'uid': {'deprecated': True}
}
}
Inject schema customization, though update_schema
callback:
class MySerializer(ModelSerializer):
def update_schema(self, schema):
schema['properties']['_uid']['deprecated'] = True
return schema
ViewSet Schema customization
Inject schema customization, through update_schema
dict:
class MyViewSet(ViewSet):
update_schema = {
'/api/v1/comment-list/': {
'get': {
'deprecated': True,
}
}
}
Inject schema customization, though update_schema
callback:
class MyViewSet(ViewSet):
def update_schema(self, schema):
schema['/api/v1/comment-list/']['get']['deprecated'] = True
return schema
Generate Schema as HTML File
For generate schema as HTML file:
- Install
redoc-cli
npm install -g redoc-cli
- Download your schema as JSON file
- Generate HTML file with
redoc-cli
redoc-cli bundle your_schema.json
More info https://github.com/Redocly/redoc/blob/master/cli/README.md
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
pik-openapi-1.0.1.tar.gz
(11.2 kB
view details)
File details
Details for the file pik-openapi-1.0.1.tar.gz
.
File metadata
- Download URL: pik-openapi-1.0.1.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a36d136c96699d0bb82acf7845873c61438f22367b4a2bcb563ee777b97d327 |
|
MD5 | 72bf14d75f9ec348ab37a5c7d3fb2cc8 |
|
BLAKE2b-256 | 8f7bb063c75d75e2a48f6f4dc0f14df26e1c55aab01ee29c5375bfedde3bd90a |