728x90
반응형
HATEOAS
(Hypermedia As the Enging Of Application State)
현재 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공 -> 결국 하이퍼미디어 mapping !
RESTful API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는데,
하나의 리소스에서 파생할 수 있는 여러가지 추가 작업의 정보들을 한번에 얻을 수 있다.
링크를 통해서 다른 페이지로 가는 것을 다른 상태로 전이한다고 보고
이 링크들에 대한 레퍼런스를 서버 측에서 전송한다.
그럼으로서 클라이언트가 명시적으로 링크를 작성하지 않고도
서버 측에서 받은 링크의 레퍼런스를 통해 어플리케이션의 상태 및 전이를 표현할 수 있다.
이것이 바로 올바른 REST 아키텍처에서의 HATEOAS 구성법이다.
장점
- 요청 URI가 변경되더라도 클라이언트에서 동적으로 생성된 URI를 사용함으로써,
클라이언트가 URI 수정에 따른 코드를 변경하지 않아도 되는 편리함을 제공한다.
- URI 정보를 통해 들어오는 요청을 예측할 수 있게 된다.
- Resource가 포함된 URI를 보여주기 때문에, Resource에 대한 확신을 얻을 수 있다.
HATEOAS 구현 방법
1) pom.xml에 add dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
2) Controller에 Code 추가
// UserController
@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));
}
// User 객체 반환
Resource<User> resource = new Resource<>(user);
// user 객체가 추가적으로 사용할 수 있는 정보(링크)를 하이퍼미디어 타입으로 넣기
//static method 사용하면 아래의 코드 처럼 길게 쓰지 않아도 됨
//ControllerLinkBuilder linkTo = ControllerLinkBuilder.linkTo(
//ControllerLinkBuilder.methodOn(this.getClass()).retrieveAllUsers());
//import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
//import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
// retrieveAllUsers() 메소드와 "all-users" 이름 링크 작업
resource.add(linkTo.withRel("all-users"));
return resource;
}
출처 및 참고
https://engkimbs.tistory.com/866
https://wallees.wordpress.com/2018/04/19/rest-api-hateoas/
728x90
반응형