스프링 정리

Path Variable vs Query Parameter

void_melody 2023. 11. 19. 22:36

우리가 자주 코드를 작성하다보면, client로부터 인자를 
path Variable로 받을지, RequestParam으로 받을지, 아니면 RequestBody로 받을지 고민된다.

GetMapping에서는 RequestBody를 지원하지 않기에, 자연스레 GetMapping을 할 때는 PathVariable vs RequestParam으로 귀결되게 된다.

이런 상황일 때, 나름의 기준이 있으면 좋을 것 같아 정리해보려 한다.

 

1. Query Parameter

/users?id=123                  # 아이디가 123인 사용자를 가져온다.

 

@GetMapping("/user")
public String getUser(@RequestParam String id, 
                      @RequestParam(name="password" String pw){
}

 

name이라는 파라미터를 통해 uri에서 바인딩할 파라미터의 이름을 지정할 수 있다.

또한 required라는 파라미터를 통해 해당 값이 필수적으로 전달되어야한다라는 것을 명시할 수 있다.

 

2. Path Variable

/users/123                        # 아이디가 123인 사용자를 가져온다. 

 

 

3. 각각 언제 사용해야하는가?

참고한 포스팅에서는 다음과 같이 명시한다.

 

어떤 resource를 식별하고 싶으면 Path Variable을 사용하고,
정렬이나 필터링 등을 한다면 Query Parameter을 사용하는 것이 Best Practice이다.

/users                          # 사용자 목록을 가져온다.
/users?age=20           # 나이가 20인 사용자를 가져온다.
/users/123                   # 아이디가 123인 사용자를 가져온다.

 

또한, 기본적인 CRUD 기능을 위해서 또 다른 URL이나 Query Parameter를 정의할 필요는 없다.
대신에 원하는 기능에 맞게 HTTP 메서드를 변경하면 된다.

/users [GET]                   # 사용자 목록을 가져온다.
/users [POST]                # 새로운 사용자를 생성한다.
/users/123 [PUT]           # 사용자를 갱신한다.
/users/123 [DELETE]     # 사용자를 삭제한다.

 

 

납득이 간다.

pathVariable은 하나만 전달할 수 있다.

그렇기에 보통 id로 인지하고 식별할 때 사용할 것이다. 

 

반면에 Query Parameter는 여러 개를 전달할 수 있다.
여러 개의 인자가 필요할 때 RequestParam을 고려해보자.

 

나라면, id 처럼 값 하나를 통해 식별 가능할 수 있는 상황일 때 path variable을 사용하고

그게 아니라 인자의 이름도 필요하다면 request Param을 적극적으로 사용해보려 한다..!

 

참고
https://medium.com/@fullsour/when-should-you-use-path-variable-and-query-parameter-a346790e8a6d

 

When Should You Use Path Variable and Query Parameter?

In this article, I’d like to show you what is a Path Variable and Query Parameter. And how you think and use those as best practice.

medium.com