앞서 REST API에 대해 다룬 포스팅을 통해 RESTful한 API 주소를 디자인하는 것이 중요하다는 것을 알 수 있었다. 이번 포스팅에서는 장고를 통해서 백엔드 엔드포인트를 생성할 때 중요하게 고려해야 할 개념인 Path variable과 Query Parameter에 대해서 알아보려고 한다.
Path Variable
이라는 명칭에서도 유추할 수 있듯이, URI 경로에 요청하는 리소스에 대한 정보를 변수에 담아서 전달하는 방식이 Path Variable
이다. CRUD 기능이 주로 쓰이는 웹 페이지에서 자주 살펴볼 수 있는 API 디자인 방식이라 할 수 있다. 커머스 사이트의 제품 상세 페이지에 대한 정보를 요청할 때 자주 사용된다.
장고에서 Path Variable
로 리소스에 대한 정보를 받아서 처리하기 위해서는 <>
기호를 통해서 urlpattern
을 정의해야 한다. 장고에는 url에 포함된 정보의 형식을 명시적으로 지정할 수 있는 Path conveter
가 있어서, 데이터베이스에 저장된 정보에 맞게 url을 디자인할 수 있다. 만약 내장된 converter가 부족한 경우, 커스텀 converter를 등록하여 사용할 수 있고, 혹은 re_path()
함수를 사용하여 정규표현식을 사용하면 된다.
Path Variable
로 들어온 정보를 View
에서 접근하기 위해서는 **kwargs
에서 key값을 통해서 접근할 수 있다.
만약 웹 사용자가 특정 상품이나 정보에 대해서 찾기 위해서 데이터 정보를 입력했을 때, 이에 대한 대응으로 백엔드 개발자는 어떠한 방식으로 API를 준비해야 할까? 이때 고려할 수 있는 API 디자인 방식이 Query Parameter
이다. 주로 데이터를 특정 조건으로 검색하거나 정렬하고자 할 때 활용되는 방식이다. Velog에서도 장고를 키워드로 게시글을 검색했을 때, 쿼리 형식으로 작성된 주소로 페이지가 이동되는 것을 확인할 수 있다.
Query Parameter
으로 전송된 API에 대응하기 위해서 URL 패턴 정의를 따로 해주어야 하는 부분은 없다. 대신 View 함수에서 해당 Parameter에 접근하기 위해서는 HTTP Method
에 따라 request.GET
또는 request.POST
로 QueryDict
객체를 호출해야 한다. QueryDict
객체는 Dictionary의 subclass로 key와 value형식으로 이루어져 있기 때문에, 전달되는 변수를 키값으로 조회해서 데이터를 처리하면 된다.
참고자료
https://docs.djangoproject.com/en/3.2/topics/http/urls/
https://docs.djangoproject.com/ko/3.0/ref/request-response/#querydict-objects