[REST API] REST API HATEOAS 구현하기

민지·2024년 3월 14일
0

REST API - Spring Boot

목록 보기
19/27

HATEOAS란?

HATEOAS 단어 자체의 의미

HATEOAS == Hypermedia as the Engine of Application State 의 약어이다.

한마디로, 내가 만든 REST API의 resource간에 hyperlink를 만드는 방법이다!

_links -> 해당 링크는 resource간의 hyperlink를 만들어준 예시이다.

HATEOAS 구현 방법

  • HAL -> format to hyperlink between resources in your API
  • Spring HATEOAS
    • HAL 표준 형식을 사용하려면, 리소스에 대한 하이퍼링크인 HAL response를 생성해주는, Spring HATEOAS를 사용해주면 된다!

스프링 HATEOAS와 HAL 구현 과정

1. pom.xml modified

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

2. user/UserResource.java modified

수정 전 - 뭘 해야 하는지?

수정 후

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;

//http://localhost:8080/users
//EntityModel
//WebMvcLinkBuilder
	
@GetMapping("/users/{id}")
public EntityModel<User> retrieveUser(@PathVariable int id) {
	User user = service.findOne(id);
	
	if(user==null)
		throw new UserNotFoundException("id:"+id);
	
	EntityModel<User> entityModel = EntityModel.of(user);
	
	WebMvcLinkBuilder link =  linkTo(methodOn(this.getClass()).retrieveAllUsers());
	entityModel.add(link.withRel("all-Users"));
	
	return entityModel;
}
  • 데이터와 링크 응답(response)를 생성하려면 HATEOAS의 두 가지 개념을 사용해야 한다.
    -> EntityModelWebMvcLinkBuilder

  • EntityModel

    domain object를 wrapping하여 링크를 추가하는 클래스
    링크를 반환하려면 EntityModel에 링크를 추가해야 한다!

  • WebMvcLinkBuilder

    -> Spring MVC controller를 가리키는 link 객체의 구축을 용이하게 하는 빌더

    • retriveAllUser 메서드에 대한 링크를 얻어야 함!
      → WebMvcLinkBuilder.linkTo 메서드를 사용해, 컨트롤러 메서드를 가리키는 링크를 생성한다.

    • 링크가 주어지면, `entityModel.add()를 통해, entityModel에 하이퍼링크를 추가해야 한다!

실행결과,




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

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

0개의 댓글