livflow project 22일 - swagger 설정

주영광·2024년 11월 27일
0

livflowproject

목록 보기
24/30
post-thumbnail

이제 프론트 엔드 배포가 끝나서 백엔드 코드와 라이브러리 등을 점검한다.

swagger는 백엔드 api를 쉽게 보고, test하기 위해서 별도의 페이지가 생성되고

api가 변경될때마다 반영되어, 따로 명세서가 필요없기 때문에 만들어두면 편할거 같기도하고

한번쯤 사용법을 익힐필요가 있어서 연습삼아 만들어보았다 .

# Swagger 설정
schema_view = get_schema_view(
   openapi.Info(
      title="Livflow API",
      default_version='v1',
      description="Livflow 가계부, 단가계산기 api 입니다.",
      terms_of_service="https://www.google.com/policies/terms/",
      contact=openapi.Contact(email="dudrknd1642@gmail.com"),
      license=openapi.License(name="MIT License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
   url='https://api.livflow.co.kr:8443',# 모든 사용자가 접근 가능
)

이미 스웨거로 자동문서화 하는 방법은 엄청 많기 때문에 그냥 내가 써보면서 이해해야할 부분을 적으려고한다.

우선 스웨거는 장고기본 drf_yasg이다. 이와 비슷한 기능이 있는 redoc은 장고에서 기본 제공해주는게 아니다. 이걸 기억해야하는게 aws가 아니라 nginx로 배포하는 경우에는 swagger는 따로 location을 지정해줄 필요없이 엔드포인트가 swagger일 경우에는

        location / {
            proxy_pass http://web_backend/;  # 모든 요청을 Django 백엔드로 전달
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

이렇게 장고 기본으로 보내주면 swagger사이트가 뜬다.
하지만 Redoc같은 경우에는

        location /redoc/ {
            proxy_pass http://web_backend/redoc/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

이렇게 따로 지정을 해주어야 쓸수있다.

그럼 이렇게 기본 스웨거가 나오는데

스웨거도 csrf 설정을 해주어야 사용이 가능하기때문에 csrf설정을 하고

test를 위헤 post같은경우에는 입력값을 넣어봐야하기때문에

    @swagger_auto_schema(
        request_body=openapi.Schema(
            type=openapi.TYPE_OBJECT,
            properties={
                'name': openapi.Schema(type=openapi.TYPE_STRING, description='가게 이름'),
                'address': openapi.Schema(type=openapi.TYPE_STRING, description='가게 주소'),
            },
            required=['name', 'address'],
        )![](https://velog.velcdn.com/images/glory_joo/post/ae92e1ed-888b-4680-b556-7700afb1e8e8/image.png)

예시로 이런 오토스키마를 사용해서 직접 값을 넣게 할 수있다.

그럼 이런식으로 값을 입력해서 test를 해볼 수 있게된다.

프론트엔드와 직접 api명세서로 투닥거릴게 아니라면 swagger를 사용해서 문서화해도 좋을거같다.

profile
오직 실력만이 나를 증명한다.

0개의 댓글