Hypermedia As The Engine Of Application State를 구현하기 위해 편리한 기능들을 제공해주는 tool(라이브러리)이다.
Hypermedia As The Engine Of Application State는 Rest API를 만들 때,
서버가 리소스에 대한 정보를 제공할 때, 그 리소스와 연관이 되어있는 링크 정보들까지 같이 제공하고,
클라이언트는 제공이 된 연관된 링크 정보를 바탕으로 리소스에 접근한다.
pom.xml에 아래의 의존성을 넣어준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
@Test 파일을 만들어준다.
해당 테스트를 실행하기 위한 SampleController이다.
이렇게 하면 이 리소스 정보, Hello라는 객체가 json으로 변환이 되어 응답으로 나간다.
위에서 사용한 Hello 객체는 아래와 같다.
이 상태로 test를 돌리면 error가 난다. $._links.self를 주지 않았기 때문이다.
링크 정보를 추가해줘야한다.
Hateoas에 있는 EntityModel을 선언한다.(우리가 제공할 리소스의 링크정보)
그 후, SampleController 클래스에서 제공하는 hello라는 메서드에 대한 링크를 따서 이 링크를 Self라는 릴레이션으로 만들어서 추가한다.
그리고 테스트를 실행하면 통과함과 동시에, link가 추가됨을 볼 수 있다.
이렇게 관련된 링크 정보들을 EntityModel에 추가해서 리턴하는 식으로 구현하고, 클라이언트도 그걸 사용하는 방식이 Hateoas(Rest API의 정점)이다.
hateoas 의존성을 추가하면, 스프링 부트가 많은 것을 제공해주는데, 그 중 중요한 두가지가 ObjectMapper와 LinkDiscovers이다.
ObjectMapper는 우리가 제공하는 리소스를 json으로 변환할 때 사용하는 인터페이스이다.
객체를 json으로 변환하거나, json을 객체로 변환하거나 할 때 사용하는 mapper이다.
따로 등록할 필요없이 주입받아 사용할 수 있다.
XPath를 확장해서 만든 HATEOAS 용 클라이언트 API이다.
rest api로 다른쪽 서버 api를 요청해서 받았는데, 그게 hateoas를 지원한다면(링크 정보를 담고 있다면) 메서드를 이용해서 self에 해당하는 링크정보를 가져올 수 있다.