인트로
안녕하세요 :D
오늘은 장고에서 Swagger를 활용하여 REST API Doc을 만들어 보겠습니다.
swagger는 프로젝트 내 많은 API를 한꺼번에 문서화하여 볼 수 있게 하는 패키지로, API 관리에 매우 용이합니다.
Swagger를 사용하기 위해서는 drf-yasg , djangorestframework를 설치하여 사용할 예정입니다.
drf-yasg는 장고로 정의된 API를 문서화할 수 있는 패키지로, (django rest framework- Yet another Swagger generator)의 약자입니다. 그럼 swagger 를 사용 환경을 세팅하여, Rest API 문서를 열어보겠습니다.
* 프로젝트 환경 (프로젝트명 : testproject / 앱명 : blog / FBV)
목차
1. 라이브러리 설치
2. settings.py 추가
3. urls.py 추가
4. API 데코레이터 추가
1. 라이브러리 설치 |
먼저 장고 Swagger를 사용하기 위해서는 drf-yasg, djangorestframework 두 가지가 필요합니다.
장고 REST API를 위해 아래 두 라이브러리를 설치합니다.
REST란? Reperesentational State Transfer의 약자로, SW 아키텍처의 한 형식입니다. URL만 요청하면 특정 파일 형식으로 데이터를 반환하기 때문에 요청 플랫폼에 종속적이지 않고, 확장성이 좋아 많이 사용되고 있습니다. REST와 많이 쓰이는 형식은 SOAP(Simple Object Access Protocol) 인데 , 대부분의 레거시 시스템에서 많이 사용되고 있습니다.
pip install drf-yasg
pip install djangorestframework
2. setting.py 추가 |
settings.py의 INSTALLED_APPS 에 아래 두 패키지를 추가합니다.
INSTALLED_APPS = [
'drf_yasg', #drf_yasg
'rest_framework', #djangorestframework
]
3. urls.py 추가 |
urls.py에는 아래와 같이 3단계에 걸쳐 추가합니다. (본 글 최하단에 전체 코드가 있습니다)
1. get_schema_view/openapi/AllowAny import
urls.py에는 아래와 같이 get_schema_view/openapi/AllowAny 등을 import합니다.
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from rest_framework.permissions import AllowAny
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
2. schema_url_patterns 정의
schema_url_patterns에는 swagger에서 API 문서로 보고싶은 URL들을 정의합니다.
schema_url_patterns = [
path('', include('blog.urls')),
]
schema_view_v1 = get_schema_view(
openapi.Info(
title="Open API",
default_version='v1',
description="시스템 API",
terms_of_service="https://www.google.com/policies/terms/",
),
public=True,
permission_classes=(AllowAny,),
patterns=schema_url_patterns,
)
3. urlpatterns 정의
swagger를 보기 위한 엔드포인트를 정의합니다.
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('blog.urls')),
url(r'^swagger(?P<format>\.json|\.yaml)$', schema_view_v1.without_ui(cache_timeout=0), name='schema-json'),
url(r'^swagger/$', schema_view_v1.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
url(r'^redoc/$', schema_view_v1.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
그리고 로컬 서버를 돌려 http://127.0.0.1:8000/swagger/ 에 접속하면 아래와 같은 화면이 뜹니다.
4. API 데코레이터 추가 |
DRF(django rest framework)에서는 요청한 request구분을 API 데코레이터를 통해 구분합니다.
제 장고 프로젝트는 FBV(Function Based View) 이기 때문에, API 데코레이터인 @api_view(['GET'])으로 선언해 주어야 swagger에서 인식합니다. 저와 같은 FBV 기반 프로젝트는 @api_view 데코레이터를 사용하여 API 뷰를 짜야 하며, CBV 기반 프로젝트는 APIView 클래스를 사용하여 API 뷰를 짜야 합니다 :D
urls.py
from django.urls import path
from . import views
app_name='blog'
urlpatterns = [
path('/get_url',views.get, name = 'get'),
path('/post_url',views.post, name = 'post'),
]
views.py
from django.shortcuts import render
from rest_framework.decorators import api_view #api
from rest_framework.response import Response #api
@api_view(['GET'])
def get(request) :
return Response(request)
@api_view(['POST'])
def post(request) :
return Response(request)
urls.py와 views.py를 입력하고 서버를 돌려 로컬 주소로 들어갑니다.
URL : http://127.0.0.1:8000/swagger/
아래와 같이 내가 선언한 메소드들이 API 문서화되어 있는 것을 볼 수 있습니다 :D
첨부) urls. py 전체 코드
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from rest_framework.permissions import AllowAny
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_url_patterns = [
path('', include('blog.urls')),
]
schema_view_v1 = get_schema_view(
openapi.Info(
title="Open API",
default_version='v1',
description="시스템 API",
terms_of_service="https://www.google.com/policies/terms/",
),
public=True,
permission_classes=(AllowAny,),
patterns=schema_url_patterns,
)
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('blog.urls')),
url(r'^swagger(?P<format>\.json|\.yaml)$', schema_view_v1.without_ui(cache_timeout=0), name='schema-json'),
url(r'^swagger/$', schema_view_v1.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
url(r'^redoc/$', schema_view_v1.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
'BE > Django' 카테고리의 다른 글
[django] 부트스트랩(bootstrap) 테마 적용하기 (1) | 2021.07.15 |
---|---|
[django] REST API GET/POST 구현 (2) | 2021.07.12 |
[django] 어드민 계정 생성 및 비밀번호 초기화 (0) | 2021.06.29 |
[django] 웹페이지 만들기 (3) - 뷰 생성하기 (0) | 2021.06.28 |
[django] 웹 페이지 만들기 (2) 프로젝트와 앱 생성하기 (0) | 2021.06.26 |