HATEOAS
(Hypermedia As the Enging Of Application State)
현재 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공 -> 결국 하이퍼미디어 mapping !
RESTful API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는데,
하나의 리소스에서 파생할 수 있는 여러가지 추가 작업의 정보들을 한번에 얻을 수 있다.
링크를 통해서 다른 페이지로 가는 것을 다른 상태로 전이한다고 보고
이 링크들에 대한 레퍼런스를 서버 측에서 전송한다.
그럼으로서 클라이언트가 명시적으로 링크를 작성하지 않고도
서버 측에서 받은 링크의 레퍼런스를 통해 어플리케이션의 상태 및 전이를 표현할 수 있다.
이것이 바로 올바른 REST 아키텍처에서의 HATEOAS 구성법이다.
장점
- 요청 URI가 변경되더라도 클라이언트에서 동적으로 생성된 URI를 사용함으로써,
클라이언트가 URI 수정에 따른 코드를 변경하지 않아도 되는 편리함을 제공한다.
- URI 정보를 통해 들어오는 요청을 예측할 수 있게 된다.
- Resource가 포함된 URI를 보여주기 때문에, Resource에 대한 확신을 얻을 수 있다
HATEOAS란?
Hateoas란 REST Api를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는 것을 의미합니다. 이러한 방법은 클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환하는 것으로 가능하게 할 수 있습니다
라고 위키에 정의 되어 있다.
HATEOAS를 사용해보자
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
우선 디펜던스를 폼.xml에 추가 해보자
이렇게 되면 우선 사용이 가능하다.
@GetMapping("/users/{id}")
public Resource<User> retrieveUser(@PathVariable int id) {
User user = service.findOne(id);
if (user == null) {
throw new UserNotFoundException(String.format("ID[%s] not found", id));
}
// HATEOAS
Resource<User> resource = new Resource<>(user);
ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
resource.add(linkTo.withRel("all-users"));
return resource;
}
우선 User 객체를 반환한다.
user 객체가 추가적으로 사용할 수 있는 정보(링크)를 하이퍼미디어 타입으로 넣어준다.
이때 static 메소드를 사용하면 아래의 코드를 길게 쓰지 않아도 된다.
//ControllerLinkBuilder linkTo = ControllerLinkBuilder.linkTo(
//ControllerLinkBuilder.methodOn(this.getClass()).retrieveAllUsers());
retrieveAllUsers() 메소드와 "all-users" 이름으로 링크를 작업한다.
link작업이 완료 되었다.
'Spring Boot > Restful-Api + Spring Boot' 카테고리의 다른 글
Restful-API연습 (10) REST API Monitoring을 위한 Actuator 설정 (0) | 2022.06.12 |
---|---|
RestFul API 연습(9) Swagger 사용 (0) | 2022.06.04 |
RestFul API 연습(7) 다국어 처리를 위한 Internationalization 구현 방법 (0) | 2022.06.03 |
RestFul API 연습(6) 유효성 체크를 위한 Validation API 사용 (0) | 2022.06.03 |
RestFul API 연습(5) 회원관리 예외처리 포스트맨사용 (0) | 2022.06.02 |