swagger 설치
- 작업 중인 파이썬 가상환경으로 이동한다.
- pip 명령어로 설치한다.
- pip install drf-yasg
☞ installation 참고 : https://drf-yasg.readthedocs.io/en/stable/readme.html#installation
(pubd_api) pubdapi % ls
db.sqlite3 manage.py pubdapi pubdapp
(pubd_api) pubdapi % pip install drf-yasg
.....
.....
.....
Installing collected packages: pytz, uritemplate, pyyaml, packaging, inflection, drf-yasg
Successfully installed drf-yasg-1.21.7 inflection-0.5.1 packaging-24.1 pytz-2024.1 pyyaml-6.0.1 uritemplate-4.1.1
(pubd_api) pubdapi %
settings.py
- INSTALLED_APPS에 drf_yasg 추가한다.
- 'drf_yasg' 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'pubdapp',
'drf_yasg',
]
urls.py
- swagger license 등 기본 세팅
from django.contrib import admin
from django.urls import path, include
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="공공데이터 포털 API",
default_version='v1',
description="국회도서관 자료검색",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="contact@snippets.local"),
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('rest_framework.urls')),
path('api/pubd/', include('pubdapp.urls')), #공공데이터 포탈 API URL 모음
path('swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
views.py
- swagger_auto_schema 작성
- 파라미터는 매뉴얼로 작성한다.
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from .api import nanet_api
from .models import Nanet
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
# Create your views here.
@swagger_auto_schema(
method='get',
operation_description='국회도서관 자료검색 API',
operation_summary='국회도서관 자료검색 API',
manual_parameters=[
openapi.Parameter('ServiceKey', openapi.IN_QUERY, description='서비스키', type=openapi.TYPE_STRING),
openapi.Parameter('search', openapi.IN_QUERY, description='검색어', type=openapi.TYPE_STRING),
openapi.Parameter('pageno', openapi.IN_QUERY, type=openapi.TYPE_NUMBER, description='페이지번호'),
openapi.Parameter('displaylines', openapi.IN_QUERY, type=openapi.TYPE_NUMBER, description='페이지 Rows'),
],
responses={200:
openapi.Response(
description="200 OK",
schema=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'resultCode': openapi.Schema(default="00", description="결과코드",type=openapi.TYPE_STRING),
'resultMsg': openapi.Schema(type=openapi.TYPE_STRING, default="OK", description="결과메세지"),
'total': openapi.Schema(type=openapi.TYPE_STRING, description="전체 결과수"),
'name': openapi.Schema(type=openapi.TYPE_STRING, description="디스플레이 카테고리명"),
'value': openapi.Schema(type=openapi.TYPE_STRING, description="디스플레이 데이터"),
}
)
)
}
)
@api_view(['GET'])
@permission_classes([AllowAny])
def nanet_search(request):
param = []
test = []
param.append(request.GET.get('search'))
param.append(request.GET.get('pageno'))
param.append(request.GET.get('displaylines'))
if param[0] is not None:
create_nanet_log(param)
else:
test.append('자체 테스트중')
test.append(1)
test.append(10)
create_nanet_log(test)
res = nanet_api(param)
return Response(res)
def create_nanet_log(param):
nanet_save = Nanet(search=param[0], pageno = param[1], displaylines=param[2])
nanet_save.save()
swagger 확인
마무리
API 요청/응답 문서를 관리하는 swagger 적용이 마무리되었다.
다음에는 지금까지 작성한 코드를 테스트하기 위한 테스트 코드 작성하여
API 호출테스트로 코드의 안정성을 확보할 수 있도록 해보겠다.
☞ python, django 설치는 이전 글 참고
https://yuneenelife.tistory.com/entry/API-Server-django-python-Framework-설치-1
'국회도서관 자료검색 서비스' 카테고리의 다른 글
vue, vue cli 설치하고 버전 확인 #12 (0) | 2024.08.13 |
---|---|
django Test 코드 작성하여 코드 안정성 높이기 #11 (0) | 2024.08.12 |
django 공공데이터 포털 API 코드, 환경변수 설정, admin 생성하기 #9 (0) | 2024.08.08 |
django APP들을 위한 마이그레이션(migrate) 작업#8 (0) | 2024.08.07 |
pylint 로 python 가상환경 venv 코드와 vs code 와 연결시키기 #7 (0) | 2024.08.06 |