Path variable, Query String

이산·2022년 4월 10일
0

기술블로그

목록 보기
18/42

웹에서 특정 데이터를 전송하고 받기 위해서는 어떤 경로(End-Point)에 요청할 것인가는 중요한 문제이다. 우리는 데이터를 받고, 때로는 전송을 하기 위해서 다양한 방식을 쓰는데 이 때 효율적으로 경로(End-point)를 설정하는 방식에 대해 알아보고자 한다.

Query String

만약 소셜 서비스를 만들다고 생각할 경우 사용자를 위한 페이지를 만들기 위해선 식별된 파라미터 경로가 필요하다.

/users?id=23

위와 같이 id란 변수에 값을 담아서 id가 23번인 사용자를 가져올 수 있으며 key, value 쌍으로 이루어진다.

/users?id=6&id=7

&를 사용하여 여러개의 데이터를 주고받을 수도 있다. 서버에서는 id를 받고 그 유저에 대한 정보를 보내준다. 이것이 Query String이 동작하는 방식이다.

Class UserView(View):
	def get(self, request):
		user = request.Get.get('user_id')

서버에서는 위와 같이 HTTP request 안에 request.GET 또는 request.POST 객체로 쿼리 딕셔너리를 가져올 수 있다.

request.GET에서는 <QueryDict: {'user_id': 23} 형태로 저장된다.

정렬이나 필터링이 필요할 경우에는 Query String이 적합하다.

Query String은 해당하는 데이터가 없을 경우 빈 리스트를 환한다.


path variable

/users/123

Path Variable은 이름처럼 123을 변수로써 서버에 전달한다. 서버에서는 123 자체를 변수로 받아서 편하게 사용할 수 있다.

#views.py
Class UserView(View):
	def get(self, request, user_id):
		user = user.objects.filter(id=user_id).values()

#urls.py
urlpatterns=[
	path('user/<int:user_id>', UserView.as_view())
]

Django에서 Path variable는 뷰클래스 함수에서 self, request 외에 별도의 인자를 가지게 되고, 그 인자값이 엔드포인트가 된다. 따라서 urls파일에 반드시 위와 같이 입력해줘야한다.

어떤 특별한 resource를 식별하고 싶을 경우에는 Path Variable이 적합하다. 특정한 데이터의 위치를 특정해서 보여준다고 생각하면 쉽게 사용할 수 있다.

Path Variable은 해당하는 데이터가 없을 경우 404 에러를 발생하여 에러처리가 필요하다.


Api를 설계하는 데에는 정답이 없지만 위와 같이 best practice를 지키는 것은 다른 개발자와의 협업, 유지 보수 측면에서 더 효과적이다.

profile
백엔드 개발자입니다.

0개의 댓글