brunch

라이킷 14 댓글 공유 작가의 글을 SNS에 공유해보세요

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


사용해보기

1. 의존성 추가

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

브런치 글 이미지 2


2. API 리소스에 링크 추가

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

브런치 글 이미지 3



3. 링크 공통화

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

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

브런치 글 이미지 4



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




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


ResourceSupport → RepresentationModel

Resource → EntityModel

Resources → CollectionModel

PagedResources → PagedModel

ResourceAssembler → RepresentationModelAssembler

ControllerLinkBuilder → WebMvcLinkBuilder


매거진의 이전글 REST API 문서 자동화

브런치 로그인

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