Python/Django
[Django] drf_yasg로 Django API 리스트 작성하기(Swagger 연동)
열심히 사는 우진
2022. 3. 30. 14:51
반응형
* 공부 과정에서 작성한 글로, 설명이 정확하지 않을 수 있습니다.
drf_yasg 라이브러리를 활용하면 Django 프로젝트의 API 리스트를 자동으로 생성할 수 있다.
단, generics나 Viewset을 활용한 CBV(Class Based View)여야 한다.
APIView를 사용하거나, generics, Viewset에서도 View 내부에서 커스터마이징한 메서드에 대해서는 제대로 된 명세를 작성해주지 않는다. 이 경우에는 직접 코드 내부에 명세에 관한 내용을 기입해야 한다.
(나는 대부분의 View가 APIView 또는 커스터마이징된 메서드이기 때문에 코드가 너무 지저분해질 것을 염려하여 Swagger에 직접 작성하기로 했다.)
패키지 설치 및 적용
(venv) % pip install drf-yasg
# settings.py
INSTALLED_APPS =
[
...
'rest_framework',
'myapp',
'drf_yasg'
...
]
swagger 엔드포인드 추가
from django.contrib import admin
from django.urls import path, re_path
from django.conf import settings
#from django.conf.urls import url
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="Swagger Study API",
default_version="v1",
description="Swagger Study를 위한 API 문서",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(name="test", email="dhkep03@gmail.com"),
license=openapi.License(name="Test License"),
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
path('admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns += [
re_path(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name="schema-json"),
re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), ]
적용 후 서버 실행하면 다음 주소에 접속이 가능하다.
http://localhost:8000/swagger/
http://localhost:8000/redoc/
반응형