brunch

You can make anything
by writing

C.S.Lewis

Spring HATEOAS 사용해보기

안녕하세요 백엔드 개발자 paige 입니다.

오늘은 REST API를 위한 원칙중 하나인 HATEOAS를 스프링에서 간단히 구현해보려 합니다.


*REST API에 대한 내용은 이곳을 참고해주세요.


HATEOAS란?

Hypermedia As The Engine Of Application State의 약자로 서버가 클라이언트에게 하이퍼 미디어를 통해 정보를 동적으로 제공해주는것을 말합니다.

API에서 리소스에 대해 어떠한 행동을 할 수 있는지 URL을 전달하여 클라이언트가 참고하고 사용할 수 있도록 합니다. 이때, 해당 리소스의 상태에 따라 링크 정보가 바뀌며 동적으로 리소스를 구성합니다.

예를 들어 예약의 상태에 따라 시술완료가 가능하면 시술완료 처리를 할 수 있는 링크를 포함해 응답을 전달합니다.

또한 이러한 메세지를 표현하기 위해 헤더의 Content Type을 application/hal+json으로 전달하면 클라이언트에서는 _links 필드에 링크 정보가 있다고 예상할 수 있습니다.


Spring HATEOAS

스프링에서도 HATEOAS 원칙을 따르는 REST API를 만들기위해 Spring HATEOAS 프로젝트를 제공하고 있습니다.

HTTP 응답에 들어갈 Resources와 다른 상태나 리소스에 접근할 수 있는 Links를 제공합니다.

아래와 같이 _links에 다양한 링크를 넣어 응답할 수 있습니다.


응답


사용해보기

1. 의존성 추가

spring-boot-starter-hateoas 의존성 추가로 간단하게 사용할 수 있습니다.


2. API 리소스에 링크 추가

여러건 일때는 CollectionModel, 단건일 때는 EntityModel을 사용해서 Resource와 Link를 함께 내려줄 수 있습니다.



3. 링크 공통화

2번과 같이 개발을 진행하다보면 중복되는 코드가 많이 발생할 수 있습니다. 

이때, RepresentationModelAssembler 인터페이스를 상속받아 아래와 같이 간단하게 구현이 가능합니다.



전체 프로젝트에 대한 코드는 이곳에 있으니 참고해 보세요 :)




추가로 spring boot 2.2.0 이후 변경된 내역이니 구현에 참고하시면 좋을것 같습니다.


ResourceSupport → RepresentationModel

Resource → EntityModel

Resources → CollectionModel

PagedResources → PagedModel

ResourceAssembler → RepresentationModelAssembler

ControllerLinkBuilder → WebMvcLinkBuilder


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari