BACKEND/JAVA & SPRING

올바른 URI 설계 - Path Variable 과 Query Parameter

이-프 2023. 10. 31. 11:28

Toy Project #2에서 CRUD API를 만들면서 모든 매개변수를 @RequestParam으로 받았었다. 그렇게 개발한 내용을 PR로 올렸고 돌아온 코멘트를 통해 @RequestParam과 @PathVariable의 차이점에 인지하게 됐다. 그 둘의 차이점을 이번 기회를 통해 명확히 이해하고 올바른 URI 작성법을 공부해야겠다. 🌱

 

 

Query Parameter

  • ‘?’ 뒤의 변수에 값을 담아 백엔드에 전달하는 방식
  • /api/itineraries?tripId=1 // Fetch a itinerary which has tripId of 1

언제 사용하는가?

  • 정렬이나 필터링을 할 경우
  • 선택적인 매개변수로 사용될 경우
  • 매개변수가 많을 경우
  • /users?occupation=programer # 프로그래머인 사용자 목록을 가져온다.

 

Path Variable

  • ‘/’ 뒤의 변수 없이 값만 백엔드에 전달하는 방식

언제 사용하는가?

  • 어떤 resource를 식별하고 싶을 경우
  • /users/123; # 아이디가 123인 사용자를 가져온다.

 

examples

@GetMapping("")
    public ResponseEntity<ResultResponse> getItineraryByTripId(@RequestParam long tripId){
				return ResponseEntity.status(HttpStatus.OK).body(
            ResponseDTO.res(HttpStatus.OK, itineraryGetDeleteService.getItineraryByTripId(tripId),
                "성공적으로 여정을 조회했습니다."));
    }
  • tripId에 해당되는 Itinerary를 조회하는 API의 Controller코드이다.
  • Request Param으로 사용할 경우 @GetMapping 어노테이션에 따로 작성하지 않는다.
@GetMapping("/{tripId}")
    public ResponseEntity<ResponseDTO<List>> getItineraryByTripId(@PathVariable long tripId) {
        return ResponseEntity.status(HttpStatus.OK).body(
            ResponseDTO.res(HttpStatus.OK, itineraryGetDeleteService.getItineraryByTripId(tripId),
                "성공적으로 여정을 조회했습니다."));
    }
  • 첫번째 코드와 같은 코드이나, Path Variable로 변경됐다.
  • tripId에 의해 Itinerary가 식별되므로 이와 같은 경우에는 Path Variable을 사용한다.
  • Path Variable은 /{tripId} 형태로 표시한다.

 

 

🔗 참고한 url

https://velog.io/@jcinsh/Query-string-path-variable

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

'BACKEND > JAVA & SPRING' 카테고리의 다른 글

@Builder란?  (0) 2023.11.01
MariaDB + JPA 연동  (0) 2023.11.01
@Controller vs @RestController  (0) 2023.10.31
카카오맵 open API - 키워드 검색하기  (0) 2023.10.31
싱글톤 패턴이란?  (0) 2023.09.26