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

2024. 8. 3. 12:33·Backend

하이퍼미디어를 사용한 애플리케이션 상태 표현 (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
'Backend' 카테고리의 다른 글
  • [API] API versioning
  • [API] API 캐싱(caching)
  • [API] REST - 자기 서술적 메시지
  • 상태코드 정리
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • CS (40)
        • CV (2)
        • PS (34)
      • Reveiw (18)
        • Paper (18)
        • Github (0)
      • ML (8)
        • Pytorch (5)
      • Language (59)
        • Python (8)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CV
    ReactNative
    modal
    mongo
    ML
    PRISMA
    API
    Three
    vscode
    nodejs
    ps
    Git
    python
    js
    review
    backend
    ts
    react
    expo
    CS
    PyTorch
    SOLID
    Express
    figma
    CSS
    postgresql
    deploy
    frontend
    GAN
    DB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[API] REST - 하이퍼미디어를 사용한 상태 표현(HATEOAS)
상단으로

티스토리툴바