1. HATEOAS 개요
1. HATEOAS
Hypermedia As The Engine Of Application State
애플리케이션의 상태를 전이, 관리하는엔진역할을 수행하는 하이퍼미디어
→ 클라이언트는 하이퍼링크를 따라가며 서버가 제공한 링크에 따라 애플리케이션 상태를 전이해 나갈 수 있음
클라이언트가 서버의 응답 내 포함된 하이퍼미디어 링크를 통해 다음에 수행할 수 있는 행위를 안내하거나 가이드할 수 있는 정보나 상태를 의미함
💡
Tip
HATEOAS는 REST의 제약조건 중 하나로, REST 아키텍처의 창시자인 Roy Fielding의 논문에 명시되어 있음
정리하면,
API 응답 안에 현재 리소스와 관련된 URI와 전이 가능한 상태(action)에 대한 정보를 담아 클라이언트가 다음 요청을 스스로 구성할 수 있도록 해주기 위한 목적의 REST 아키텍처 설계 개념
1-1. HATEOAS가 적용되지 않은 예시
HATEOAS를 적용하지 않았을 경우, 다음의 제한점이 있음
- 아래의 응답만으로는 클라이언트가 다음으로 수행 가능한 API를 통해 현재 사용자의 상태를 다른 상태로 변경할 수 있는지에 대한 정보를 알 수 없음
- 따라서 API를 호출하는 클라이언트가 상태를 전이하기 위해서는 별도의 API 문서를 의존하거나 URI를 프로그램 코드에 하드코딩해야 함
JSON 응답 값
GET /orders/123
{
"orderId": 123,
"status": "CREATED",
"total": 10000
}1-2. HATEOAS가 적용된 예시
HATEOAS를 적용하였을 경우, 다음의 장점이 있음
- 클라이언트는 응답에 포함된 링크를 통해 현재 상태에서 가능한 전이(예: 취소, 완료 API)를 알 수 있음
- 서버는 비즈니스 로직에 따라 조건부로 링크를 포함할 수 있음(ex. 재고가 없을 경우 주문하기 링크 미포함)
JSON 응답 값
GET /orders/123
{
"orderId": 123,
"status": "CREATED",
"total": 10000,
"_links": {
"self": { "href": "/orders/123" },
"cancel": { "href": "/orders/123/cancel" },
"complete": { "href": "/orders/123/complete" }
}
}Last updated on