
Path Variable, Query Parameter, Request Body는 API 개발을 하다보면 반드시 알아야 하는 내용이다. 그리고 각각을 어느 상황에 써야 하는지도 확실하게 알고 사용을 해야 하는데, 얼마 전까지만 해도 확실한 이해 없이 그냥 사용만 하고 있다는 느낌을 받았다. 그때 알아보며 정리한 내용을 공유하려고 한다!
Path Variable은 URL 경로의 일부로 포함되는 변수이다. 특성 리소스를 식별할 때 사용하며, 필수 값이기 때문에 누락 시 404 에러가 발생한다. 계층적인 리소스 관계를 표현할 수 있기 때문에 RESTful 설계 원칙에 부합한다.
또한, URL 기반이기 때문에 캐싱에 유리하고 CDN에 활용할 수 있다는 장점이 있다.
다음과 같이 API 버전을 Path Variable로 관리할 수도 있다.
@GetMapping("/v{version}/users/{userId}")
Path Variable을 제대로 활용하려면 RESTful 설계 원칙을 이해하면 좋다.
GET /users/123
POST /users- 사용을 권장한다. (user-profiles)GET /users/123/orders - 123번 사용자의 주문 목록GET /departments/5/employees - 5번 부서의 직원 목록// URI
GET /users/{userId}
// Spring Boot
@GetMapping("/users/{userId}")
public User getUser(
@PathVariable Long userId
) {...}
/products/{category}/{subcategory}/{brand}../ 패턴 체크가 필요하다.Query Parameter는 URL 뒤에 ?key=value 형태로 전달되는 매개변수다. 선택적 조건이나 필터링에 주로 사용되며, 데이터 조회 시 유연성을 제공한다. 페이징을 사용하면 대용량 데이터를 효율적으로 처리할 수 있다.
// URI
GET /users?page=1&size=10
// Spring Boot
@GetMapping("/users")
public List<User> getUsers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size
) {...}
HTTP 요청 본문에 포함되는 데이터로, JSON, XML, Form Data 등 다양한 형태로 보낼 수 있어 복잡하고 민감한 데이터를 안전하게 전송할 수 있다.
주로 POST, PUT, PATCH, DELETE에서 사용된다.
// URI 및 Request Body
POST /users
Content-Type: application/json
{
"name" : "가나다",
"email" : "ganada@example.com",
"age" : 30
}
// Spring Boot
@PostMapping("/users")
public User createUser(
@RequestBody CreateUserRequest request
) {...}
@Valid 사용 권장)| Path Variable | Query Parameter | Request Body | |
|---|---|---|---|
| 위치 | URL 경로 내 | URL 뒤 ?key=value | HTTP Body |
| 필수 여부 | 필수 | 선택적 | 메서드에 따라 다름 |
| 보안 | 보통 | 낮음 (URL 노출) | 높음 |
| 복잡도 | 단순 | 단순~보통 | 복잡 |
| 캐싱 | 유리 | 유리 | 불리 |
| 테스트 | URL로 가능 | URL로 가능 | 도구 필요 |
What is REST?: REST API Tutorial
HTTP 상태 코드 - HTTP | MDN
Getting Started | Building REST services with Spring