RequestParam vs. PathVariable

HwangBaco·2023년 5월 10일
0

@RequestParam

클라이언트로부터 전달받은 쿼리 파라미터(Query Parameter)를 컨트롤러 메서드의 매개변수로 매핑합니다. 일반적으로 URL에 ? 뒤에 이어지는 키-값 형태의 데이터를 전달하는 방식입니다.

일반적으로, @RequestParam(query parameter)는 필터링, 정렬, 페이징 등의 추가 정보를 전달하는 데 사용됩니다.

예를 들어, 특정 사용자의 게시물을 검색하는 API가 있다고 가정해 보겠습니다.

GET /api/posts?author=John&sort=desc&limit=10

이 경우, "author"는 검색할 사용자 이름, "sort"는 정렬 방식, "limit"은 반환할 게시물의 최대 개수를 나타냅니다. 이 정보들은 쿼리 파라미터를 사용하여 API에 전달되며, 서버에서 해당 정보를 사용해 처리할 수 있습니다.

@RestController
@RequestMapping("/api")
public class PostController {

    @GetMapping("/posts")
    public ResponseEntity<List<Post>> getPosts(@RequestParam(value = "author", required = false) String author,
                                               @RequestParam(value = "sort", required = false, defaultValue = "asc") String sort,
                                               @RequestParam(value = "limit", required = false, defaultValue = "10") int limit) {
        // ... 로직 구현
        // 예를 들어, 데이터베이스에서 author, sort, limit에 맞게 게시물을 검색하여 반환하는 로직을 작성합니다.

        List<Post> posts = new ArrayList<>(); // 결과를 담을 리스트
        // ... 검색한 게시물을 posts 리스트에 추가

        return ResponseEntity.ok(posts);
    }
}

위처럼 requestParam은 쿼리파라미터를 활용하여 arguments를 서버에 전달하는 방법입니다. 이는 위에서 확인할 수 있듯이 required 속성과 defaultValue 속성을 잘 활용할 수 있어 용도가 다양합니다.

@PathVariable

@PathVariable 애노테이션은 요청 URL의 일부를 컨트롤러 메서드의 매개변수로 매핑합니다. 이 방식은 RESTful 웹 서비스에서 자주 사용되며, URL에서 특정 자원을 식별하는 데 사용됩니다.

일반적으로 @PathVariable은 리소스의 식별자를 전달하는 데 사용됩니다.

예를 들어, 특정 사용자의 정보를 가져오는 API가 있다고 가정해 보겠습니다.

https://example.com/users/42

이 경우, "42"는 사용자의 고유 식별자(ID)를 나타냅니다. 이 정보는 @PathVariable을 사용하여 API에 전달되며, 서버에서 해당 정보를 사용해 해당 사용자의 정보를 반환할 수 있습니다.

@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable("id") Long id) {
        // ... 로직 구현
        // 예를 들어, 데이터베이스에서 id에 해당하는 사용자 정보를 검색하여 반환하는 로직을 작성합니다.

        User user = new User(); // 결과를 담을 User 객체
        // ... 검색한 사용자 정보를 user 객체에 설정

        return ResponseEntity.ok(user);
    }
}

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


출처

profile
알고리즘 풀이 아카이브

0개의 댓글