Spring HATEOAS란?

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의 정점)이다.

ObjectMapper

hateoas 의존성을 추가하면, 스프링 부트가 많은 것을 제공해주는데, 그 중 중요한 두가지가 ObjectMapper와 LinkDiscovers이다.

ObjectMapper는 우리가 제공하는 리소스를 json으로 변환할 때 사용하는 인터페이스이다.

객체를 json으로 변환하거나, json을 객체로 변환하거나 할 때 사용하는 mapper이다.

따로 등록할 필요없이 주입받아 사용할 수 있다.

LinkDiscovers

XPath를 확장해서 만든 HATEOAS 용 클라이언트 API이다.

rest api로 다른쪽 서버 api를 요청해서 받았는데, 그게 hateoas를 지원한다면(링크 정보를 담고 있다면) 메서드를 이용해서 self에 해당하는 링크정보를 가져올 수 있다.

0개의 댓글