본문 바로가기
국회도서관 자료검색 서비스

django rest framework swagger drf_yasg 설정 #10

by 유니네 라이브러리 2024. 8. 9.

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 확인

django rest framework swagger 설치
django rest framework swagger 설치

마무리

API 요청/응답 문서를 관리하는 swagger 적용이 마무리되었다.

다음에는 지금까지 작성한 코드를 테스트하기 위한 테스트 코드 작성하여

API 호출테스트로 코드의 안정성을 확보할 수 있도록 해보겠다.

 

☞ python, django 설치는 이전 글 참고

https://yuneenelife.tistory.com/entry/API-Server-django-python-Framework-설치-1

 

API Server django python Framework 설치 #1

python framework 인 django를 이용해서 API Server를 구축한다.API는 공공데이터 포털에서 제공하는 국회 도서관 자료검색 서비스를 이용한다. 먼저 작업을 시작하기에 앞서 작업을 진행할 폴더를 생성

yuneenelife.tistory.com