[REST API] User Resource에서 GET 메서드 구현하기

민지·2024년 3월 10일
0

REST API - Spring Boot

목록 보기
7/27

다룰 것

User REST API의 설계부분에서,

  • Retrieve all Users - GET /users
  • Retrieve one User - GET /users/{id}
    이 2가지 기능을 만들어보자!

즉, User Resource에서 GET method 관련 기능을 만들고, 정리해보겠다.

user/UserResource - GET /users 만들기

@RestController
public class UserResource {

	private UserDaoService service;

	@Autowired
	public UserResource(UserDaoService service) {
		super();
		this.service = service;
	}

	// GET /users
	@GetMapping("/users")
	public List<User> retrieveAllUsers() {
		return service.findAll();
	}
}
  • REST API를 만드는 거니까, @RestController 어노테이션 추가
  • 모든 Users를 조회하는 기능 -> GET /users -> retrieveAllUsers() 메서드
    • @GetMapping("/users")

user/UserResource - GET /users/{id} 만들기

@RestController
public class UserResource {

	private UserDaoService service;

	@Autowired
	public UserResource(UserDaoService service) {
		super();
		this.service = service;
	}

	// GET /users
	@GetMapping("/users")
	public List<User> retrieveAllUsers() {
		return service.findAll();
	}

	// GET /users/{id} -> 추가
	@GetMapping("/users/{id}") 
	public User retrieveOneUser(@PathVariable("id") int id) {
		return service.findOne(id);
	}
}

이때, UserDaoService에서 정의된 findOne 메서드는 다음과 같이, 자바 함수형 프로그래밍을 이용한 코드이다.

	public User findOne(int id) {
		Predicate<? super User> predicate = user -> user.getId().equals(id);
		return users.stream().filter(predicate).findFirst().get();
	}
	// stream() 메서드를 호출하여, users 리스트를 -> 스트림으로 변환
    // filter() 메서드를 사용하여, 스트림을 통과하는 각 원소에 대해 주어전 조건(predicate)를 만족하는지 확인
    // findFirst() 메서드는 조건을 만족하는 첫번째 원소를 찾으면, 그 원소를 반환하는 반환하는 Optional 객체로 감싸서 반환한다.
    // findOne메서드의 리턴값은 User이기 때문에, get()메서드를 호출해, Optional 타입으로부터 실제 값을 얻어내야 한다!

실행결과 체크

  • GET localhost:8080/users 실행결과

  • GET localhost:8080/users/1 실행결과

  • GET localhost:8080/users/3 실행결과

모두 성공했다!

단순한 궁금증; 만약 이처럼 사용자 정보를 조회할 때 GET메서드 안 쓰고, POST 메서드 쓰면 어떻게 되는지?

REST API의 의도, 명확성, 그리고 클라이언트와 서버 간의 올바른 의사소통을 위해, 지켜야한다. REST API 설계원칙을 지키는 것!

참고 및 출처

이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/

profile
배운 내용을 바로바로 기록하자!

0개의 댓글