아카이브

[API] REST - 하이퍼미디어를 사용한 상태 표현(HATEOAS) 본문

Backend

[API] REST - 하이퍼미디어를 사용한 상태 표현(HATEOAS)

Rayi 2024. 8. 3. 12:33

하이퍼미디어를 사용한 애플리케이션 상태 표현 (Hypermedia As The Engine Of Application State, HATEOAS)

 HATEOAS는 하이퍼미디어를 사용하여 애플리케이션의 상태 표현하거나 변경하는 방법을 제공해야 한다는 조건입니다.

 

일반적으로 응답에 대한 요청은 json형식을 많이 사용합니다.

하지만 json은 자원에 대한 표현만 나타낼 뿐, 애플리케이션에서 그 자원을 이용해 무엇을 더 할 수 있는지는 전달하지 않습니다.

{
    "id": "1",
    "name": "John",
}

때문에 응답은 json과 함께 또 다른 타입의 데이터를 보내 어떤 동작을 수행할 수 있는지를 설명해야 합니다.

{
    "id": "1",
    "name": "John",
    "delete": {
        "href": "members/1",
        "method": "DELETE"
    }
}

 

이때 json 외에 사용하는 새로운 타입의 데이터를 하이퍼미디어라고 합니다.

 

HATEOAS를 만족하는 하이퍼미디어 사용 방법 중 대표적인 방법은 다음과 같습니다.

1. 응답 body에 링크 포함

Json의 body에 외부링크를 포함하기 위해서는 HAL(Hypertext Application Language)을 사용합니다.

{
    "id": 2,
    "name": "James",
    "_links": {
    	"self": { // 동작1: 자신의 상태를 확인합니다.
            "href": "https://example.com/1"
            "method": "GET"
        }
    	"next": { // 동작2: 다음 페이지로 이동합니다.
            "href": "https://example.com/2"
            "method": "GET"
        }
    	"update": { // 동작3: 정보를 갱신합니다.
            "href": "https://example.com/3"
            "method": "PATCH"
        }
    }
}

2. Link 헤더

Link헤더에서는 <>로 하이퍼미디어를 명시하고, rel 속성에 어떤 상태로 변경되는지를 나타냅니다.

Link: <https://example.com/docs/members>; rel="profile",
    </members/1>; rel="previous",
    </members/3>; rel="next"
{
    "id": 2,
    "name": James"
}

3. <a> 태그

HTML의 요소로 사용되는 <a> 태그 또한 HATEOAS에 필요한 조건을 모두 갖추고 있습니다.

동작할 내용(next)과 그 내용에 해당하는 링크(href="...")를 모두 제공하기 때문입니다.

<a href="https://example.com/members/3">next</a>
728x90

'Backend' 카테고리의 다른 글

[API] API versioning  (0) 2024.08.03
[API] API 캐싱(caching)  (0) 2024.08.03
[API] REST - 자기 서술적 메시지  (0) 2024.08.01
상태코드 정리  (0) 2024.08.01
[API] REST - 표현을 통한 자원에 대한 조작: HTTP Method  (0) 2024.08.01
Comments