이번 글은 django restframework를 이용해 API를 만들 때, 이걸 잘 설명하는 문서화를 자동으로 만드는 방법에 대해 알아보려 한다.
자동으로 문서화를 해주는 package는 drf-yasg 이다.
구글링을 통해 drf-yasg를 많이 추천하였고 간단히 어떻게 사용하는지에 대해 알아보려고 한다.
pip install -U drf-yasg
pip install flex
INSTALLED_APPS = [
...
'drf_yasg',
...
]
from django.conf.urls import url
from drf_yasg.views import get_schema_view
from rest_framework.permissions import AllowAny
from drf_yasg import openapi
schema_url_v1_patterns = [
url(r'^sample/v1', include('sample.urls', namespace='sample')),
]
schema_view_v1 = get_schema_view(
openapi.Info(
title="sample API",
default_version='v1',
description="This is the sample API for something",
contact=openapi.Contact(email="service.sample@google.com"),
license=openapi.License(name="sample company"),
),
validators=['flex'],
public=True,
permission_classes=(AllowAny,),
patterns=schema_url_v1_patterns,
)
urlpatterns = [
...
url(r'^sample/v1/', include('sample.urls', namespace='sample_api')),
...
# API document generation with drf_yasg
url(r'^v1/swagger(?P<format>\.json|\.yaml)/$', schema_view_v1.without_ui(cache_timeout=0), name='schema-json'),
url(r'^v1/swagger/$', schema_view_v1.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
url(r'^v1/redoc/$', schema_view_v1.with_ui('redoc', cache_timeout=0), name='schema-redoc-v1'),
...
]
schema_url_v1_patterns = [
url(r'^sample/v1', include('sample.urls', namespace='sample')),
]
schema_view_v1 = get_schema_view(
openapi.Info(
title="sample API",
default_version='v1',
description="This is the sample API for something",
contact=openapi.Contact(email="service.sample@google.com"),
license=openapi.License(name="sample company"),
),
validators=['flex'],
public=True,
permission_classes=(AllowAny,),
patterns=schema_url_v1_patterns,
)
이 부분을 따로 떼어내어 import 시키는 것을 권장한다.
# example
class SampleViewSet(viewsets.ModelViewSet):
'''
Sample 관련 REST API 제공
---
... 내용 ...
'''
def list(self, request, *args, **kwargs):
'''
Sample의 list를 불러오는 API
---
... 내용 ...
위와 같이 class 바로 아래 또는 method 바로 아래에 작성하면 되고 주의할 점은
앞에서 url 설정 후 다음과 같은 url을 입력해 주었다.
url(r'^v1/swagger(?P<format>\.json|\.yaml)/$', schema_view_v1.without_ui(cache_timeout=0), name='schema-json'),
url(r'^v1/swagger/$', schema_view_v1.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
url(r'^v1/redoc/$', schema_view_v1.with_ui('redoc', cache_timeout=0), name='schema-redoc-v1'),
즉, redoc과 swagger라는 페이지가 각각 존재한다.
참고 자료 :
http://jay-ji.tistory.com/31
https://medium.com/towncompany-engineering/%EC%B9%9C%EC%A0%88%ED%95%98%EA%B2%8C-django-rest-framework-api-%EB%AC%B8%EC%84%9C-%EC%9E%90%EB%8F%99%ED%99%94%ED%95%98%EA%B8%B0-drf-yasg-c835269714fc
https://gaussian37.github.io/python-rest-drf-yasg/