[Django] API URI 디자인에 필요한 Path Variable, Query Parameter

[Ted's Log] 테드로그·2021년 9월 4일
1
post-thumbnail

👋   Prologue

  앞서 REST API에 대해 다룬 포스팅을 통해 RESTful한 API 주소를 디자인하는 것이 중요하다는 것을 알 수 있었다. 이번 포스팅에서는 장고를 통해서 백엔드 엔드포인트를 생성할 때 중요하게 고려해야 할 개념인 Path variable과 Query Parameter에 대해서 알아보려고 한다.

📦   Path Variable

  Path Variable이라는 명칭에서도 유추할 수 있듯이, URI 경로에 요청하는 리소스에 대한 정보를 변수에 담아서 전달하는 방식이 Path Variable이다. CRUD 기능이 주로 쓰이는 웹 페이지에서 자주 살펴볼 수 있는 API 디자인 방식이라 할 수 있다. 커머스 사이트의 제품 상세 페이지에 대한 정보를 요청할 때 자주 사용된다.
  장고에서 Path Variable로 리소스에 대한 정보를 받아서 처리하기 위해서는 <>기호를 통해서 urlpattern을 정의해야 한다. 장고에는 url에 포함된 정보의 형식을 명시적으로 지정할 수 있는 Path conveter가 있어서, 데이터베이스에 저장된 정보에 맞게 url을 디자인할 수 있다. 만약 내장된 converter가 부족한 경우, 커스텀 converter를 등록하여 사용할 수 있고, 혹은 re_path() 함수를 사용하여 정규표현식을 사용하면 된다.
  Path Variable로 들어온 정보를 View에서 접근하기 위해서는 **kwargs에서 key값을 통해서 접근할 수 있다.


🔍   Query Parameter

  만약 웹 사용자가 특정 상품이나 정보에 대해서 찾기 위해서 데이터 정보를 입력했을 때, 이에 대한 대응으로 백엔드 개발자는 어떠한 방식으로 API를 준비해야 할까? 이때 고려할 수 있는 API 디자인 방식이 Query Parameter이다. 주로 데이터를 특정 조건으로 검색하거나 정렬하고자 할 때 활용되는 방식이다. Velog에서도 장고를 키워드로 게시글을 검색했을 때, 쿼리 형식으로 작성된 주소로 페이지가 이동되는 것을 확인할 수 있다.
  Query Parameter으로 전송된 API에 대응하기 위해서 URL 패턴 정의를 따로 해주어야 하는 부분은 없다. 대신 View 함수에서 해당 Parameter에 접근하기 위해서는 HTTP Method에 따라 request.GET 또는 request.POSTQueryDict 객체를 호출해야 한다. 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

profile
성장하는 개발자가 되기 위한 발자취 🧑🏻‍💻

0개의 댓글