https://velog.io/@gyuseok-dev/%ED%95%9C%EB%8B%A4-drf-yasg-%EB%AC%B8%EC%84%9C%ED%99%94
이전 포스팅에서 drf-yasg 설치를 해보았다.
하지만 설치만 하고 써먹지 않으면 의미가 없다.
오늘은 하나의 GET method에 어떻게 문서를 적용할 수 있는지 도전해보겠다.
In [APPNAME]/views.py
...
from drf_yasg.utils import swagger_auto_schema
...
class ProductListView(APIView):
@swagger_auto_schema(
query_serializer=ProductListQuerySerializer,
responses={200: ProductSerializer(many=True)},
tags=['Products'],
)
def get(self, request):
from_region = request.GET.get('departure_region', None)
to_region = request.GET.get('arrival_region', None)
from_date = request.GET.get('departure_date', None)
offset = int(request.GET.get('offset', 0))
limit = int(request.GET.get('limit', 20))
...
GET의 경우 Request없이 Query Parameter로 받아는 오는 정보를 표시하기 위해서 필요한 부분을 떼왔다
물론 예제에서 짜깁기 했다.
https://drf-yasg.readthedocs.io/en/stable/readme.html#example-project
우선 내가 쿼리로 받을 내용을 serializer로 선언한다.
class ProductListQuerySerializer(serializers.Serializer):
departure_region = serializers.CharField(help_text="출발 지역", required=False)
arrival_region = serializers.CharField(help_text="도착 지역", required=False)
departure_date = serializers.DateField(help_text="출발 날짜(YYYY-MM-DD)", required=False)
offset = serializers.CharField(help_text="시작위치", required=False)
limit = serializers.CharField(help_text="리스트 갯수", required=False)
선언한 QueryListSerializer를 decorator를 이용해서 문서에 표시되도록 해준다.
#선언
from drf_yasg.utils import swagger_auto_schema
#사용
...
@swagger_auto_schema(
query_serializer=ProductListQuerySerializer,
responses={200: ProductSerializer(many=True)},
tags=['Products'],
)
class ViewName(APIView)
...
이제 결과를 보자(군침) http://[ip_address]/swagger/로 접속!!
이렇게 필요한 쿼리와 설명을 확인할 수 있으며 설정에 따라 필수요소를 지정할 수도 있다.
본인은 어느하나가 없어도 통과할 수 있게 serializer field의 required를 모두 False로 지정했다.
우측 상단의 Try it out
를 누른 뒤 쿼리를 채워넣고 Execute
를 눌러 결과를 확인해볼 수 있다.
하단에 Request URL로 어떤 URL이 적용되었는지 확인 할 수 있다. 여기서 한글이기때문에 url에 unicode로 표현되는데 동작에는 문제가 없었다.
다음과 Response body가 출력되고 from_region에 내가 원하는 김포가 보인다.
하단에 출력시간을 볼 수 있다는 점도 매력이다.
다음에는 POST method까지 확장할수 있으면 좋겠다.