IT 지식/REST API

[REST API] HATEOAS

냠냠:) 2021. 7. 20. 00:08

REST 아키텍처 중 Uniform Interface의 HATEOAS를 정리한 내용입니다.

HATEOAS

Hypermedia as Engine of Application State의 약자로 REST 아키텍처의 Uniform Interface 중 하나의 제약조건이다.
"하이퍼미디어를 통해 애플리케이션 상태 변화가 가능해야 한다"라는 목표를 가지고 있고 여기서 말하는 하이퍼 미디어는 텍스트뿐만 아니라 다른 형태의 미디어에 대한 링크를 포함하는 모든 콘텐츠를 의미한다.

 

HTTP를 기반으로 하는 REST는 응답 메세지에 하이퍼미디어 링크를 포함하는 것으로 HATEOAS를 달성할 수 있고, 이를 통해 클라이언트는 하이퍼미디어 링크를 사용하여 애플리케이션의 State(상태)를 변경할 수 있다.

 

이해하기 쉽게 간단히 예를 들어보면, 유튜브에서 우리는 직접 URI로 애플리케이션의 상태를 변경하지 않는다. 간단히 말해 일반 동영상 시청, #Short, 구독한 동영상 목록을 보기 위해 직접 URI를 입력하지 않는다. 매번 요청에 대한 응답에 관련된 하이퍼미디어 링크 정보를 받는다고 보면 된다.

예시

요청
GET  /accounts/12345  HTTP / 1.1 
Host :  bank.example.com 
Accept :  application/vnd.acme.account+json 
...
응답
HTTP / 1.1  200  OK 
Content-Type:  application/vnd.acme.account+json 
Content-Length:  ... 

{
    "account": {
        "account_number": 12345,
        "balance": {
            "currency": "usd",
            "value": 100.00
        },
        "links": {
            "deposit": "/accounts/12345/deposit",
            "withdraw": "/accounts/12345/withdraw",
            "transfer": "/accounts/12345/transfer",
            "close": "/accounts/12345/close"
        }
    }
}

/accounts/12345로 GET 요청을 보낸 의미가 12345의 계좌를 조회한다는 것으로 예를 들어보자

 

응답 메세지에서 예금, 출금, 이체, 해지 등의 대한 링크 정보를 받는 것을 볼 수 있다.

 

여기서 중요한 건 요청을 보낸 사람에 따라 링크 정보는 동적으로 변경될 수 있어야 한다. 즉, 잔액이 0원인 사용자에게 withdraw의 링크 정보는 보여주면 안 된다는 뜻이다.

 

HATEOAS를 지키며 개발을 하면 화면에서 직접 URI를 작성할 필요가 없어짐과 동시에 웹 페이지를 링크를 애플리케이션의 상태를 전이할 수 있게 된다.

 

HATEOAS를 사용하면 API에 버저닝을 할 필요가 없다고 말한다.
이말은, 처음 접점(index)을 제외한 URI를 직접 클라이언트에서 하드코딩하지 않으므로 의미만 같다면 API의 URI를 변경할 수 있다는 말과 같다.
(deposit에 관한 URI가 /deposit1이던 /deposit2던 클라이언트는 deposit만 알면 되기 때문이다.)

 



정리

  • 애플리케이션의 상태는 Hyperlink를 이용해 전이되어야 한다.
  • 상태 전이가 가능한지는 미리 결정되지 않는다. → 링크는 동적으로 변경될 수 있다
  • 스프링 프레임워크에서는 REST를 위한 Spring HATEOAS를 지원한다.



자료 출처

반응형

'IT 지식 > REST API' 카테고리의 다른 글

[REST API] Self-descriptive messages  (0) 2021.07.18
[REST API] REST란  (0) 2021.06.27