drf-yasg swagger에서 {format}이 등장하는 이유

임수·2023년 1월 10일
0

Django

목록 보기
1/1

이상 발견

django 토이프로젝트 진행 중 프론트엔드와 연결을 위해, drf-yasg를 이용해 api 문서화를 시도하였다. 그런데 뭔가 이상하다...? 동일한 형식에 꼭 {format}이 뒤에 붙어서 나온다. 다음과 같이 말이다.

위의 사진을 보면 두 개가 동일한 링크처럼 보이지만, 하나에는 뒤에 {fotmat}이 붙어있음을 확인할 수 있다. 나는 단순히 drf-yasg를 설치하고 urls.py에서 설정해준 것 밖에 없는데, 어째서 저런 {format}이 뒤에 붙은 버전이 발생하는지 이유가 궁금했다.

원인

해당 원인은 urls.py의 해당 코드 때문이었다.

urlpatterns = format_suffix_patterns(urlpatterns)

사실 DRF를 사용할 때 urls.py 마지막에 항상 작성해주던 코드라 아무 생각없이 복사-붙여넣기 하던 코드인데, 인터넷에서 원인을 찾아보니 해당 코드 때문이라고 한다. 저 코드의 기능을 찾아보니, 정말 단순하게 생각하자면 원래는 마지막에 .json을 붙여주어야 json 데이터를 불러오지만, 그렇지 않아도 json 데이터를 얻을 수 있게 한다는 것이다.

예시


위의 사진을 다시 참고하자. /authentication/login에 {"email": "example@example.com", "password": "examplepassword"} 와 같은 json 데이터를 POST 요청으로 보내 유저의 토큰을 받아올 수 있다. 본래는 토큰을 json 데이터로 받기 위해서는 /authentication/login.json URL을 이용해야 하나, 위의 urlpattents = format_suffix_patterns(urlpatterns) 를 이용하면 /authentication/login/ 만으로 json 데이터를 받아올 수 있는 것이다.

urlpatterns = format_suffix_patterns(urlpatterns) 라인을 삭제하면, 다음과 같이 {format}이 등장하지 않음을 확인할 수 있다.

결론

{format}이 불편하다면, format_suffix_patterns 코드를 제거해주면 된다. 하지만 .json을 붙이지 않고도 json 데이터를 불러오는 것은 편하고, 오류의 발생을 줄여준다. 나는 프론트엔드 단에 {format}이 붙은 URL은 무시하도록 요청했다.

profile
주니어 개발자의 주니어 개발자.

0개의 댓글