REST API를 공부하다보면, HATEOAS라는 개념이 언급 되는 것을 알 수 있습니다.
처음 듣는 이름이기도하고 생소한 개념이기 때문에 한 번 정리하고 넘어가겠습니다.
먼저 간단하게 알아보면, REST API를 통해 클라이언트가 서버와 동적인 상호작용을 하도록 하는 것을 HATEOAS라고합니다.
HATEOAS는 "hate-ee-os"라고 읽으며, Hypermedia As The Engine Of Application State의 약자입니다.
이러한 HATEOAS의 특징으로 인해 클라이언트는 어떠한 동작을 했을 때 그 이후 가능한 동작들을 서버의 응답을 통해 전달받을 수 있습니다.
예를 들어, 어떠한 예약 서비스가 예약 상태에 따라 완료할 수 있는 예약이면 완료 처리를 할 수 있는 링크를 포함해 응답을 처리할 수 있도록 돕는 것을 예시로 볼 수 있습니다.
보통 HATEOAS를 사용한 API 응답의 Content-type은 application/hal+json을 사용하여 전달하며,
_links 필드에 그 url을 포함하여 응답하게 됩니다.
역시 개발자는 개념을 보는 것보다 코드나 json 같이 시각적으로 파악할 수 있는 것을 보는 것이 더 편합니다.
예를 들어, 어떠한 사람이 게시판에 글을 등록하는 POST 요청을 보냈다고 가정하고, 한 번 응답을 보겠습니다.
// Content-type: application/hal+json
{
"post_id": 1,
"_links": {
"self":{
"href":"http:/localhost:8080/posts/1"
},
"get":{
"href":"http:/localhost:8080/posts/1"
},
"update": {
"href":"http:/localhost:8080/posts/1"
},
"delete": {
"href":"http:/localhost:8080/posts/1"
}
}
}
위와 같이 일반적인 REST API의 응답에 _links 필드를 통해 다른 동작(조회, 업데이트, 삭제)을 할 수 있는 동적인 링크를 포함하고 있습니다.
Spring은 Spring HATEOAS 프로젝트를 통해 제공하고 있습니다.