1. 개요

HATEOAS (Hypermedia As The Engine Of Application State) 하이퍼미디어(a 링크를 생각해라)의 특징을 이용하여 HTTP 응답(Response) 메시지를 전달할 때 관련 리소스 링크 정보나 다음에 수행할 수 있는 작업 링크 정보를 포함하여 리턴 하는 것이다.

< 장점>

HATEOAS를 적용할 경우 응답 데이터에 대한 가독성이 증대 되고 리소스 간의 관계를 일관성 있는 링크형태로 관리할 수 있다는 장점이 있다.

< 단점>

하지만 응답 데이터가 다른 리소스 URI와 의존성을 가지게 되기 때문에 구현이 다소 까다롭다는 단점이 있다.

따라서 HATEOAS 적용은 필수 설계 대상은 아니며 API 별로 선택하여 적용하도록 권장한다.

2. 적용 예제

API에서 HATEOAS를 적용하는 방식에 대한 국제 표준은 없으며, API 별로 링크 정보를 표현하는 방법을 정의해 사용하면 된다.

가장 단순한 방식으로, 결과 JSON 객체에 포함된 각 리소스 별로 href 라는 필드를 이용해 링크 정보를 제공할 수 있다.

{
    href” : “https://host:port/customers/customer/7489”,
    “id” : “7489”,
    “engagedParty” : {
        “description” : “This Party is …”,
        “href” : “https://host:port/parties/party/6610”,
        “id” : “6610
    }
}

또는 links 라는 배열을 이용해 관련 리소스 및 제공 작업 등에 대한 링크 집합 정보를 관리할 수도 있다. 예를 들어 HTTP GET 요청에 대한 응답으로 요청된 개체와 직접 연관된 리소스, 그리고 리소스 별로 사용할 수 있는 작업 정보를 링크로 포함해 제공할 수 있다.

{
    “id” : “7489”,
    “links” : [
    {
        “rel” : “relatedParty”,
        “href” : “https://host:port/partyManagement/organization/4804”,
        “action” : “GET”,
        “types” : [“application/json”]
    },
   {
        “rel” : “relatedParty”, 
        “href” : “https://host:port/partyManagement/organization/4804”,
        “action” : “PUT”,
        “types” : [“application/json”]
    },
    {
        “rel” : “self”,
        “href” : “https://host:port/customers/customer/7489”,
        “action” : “PUT”,
        “types” : [“application/json”]
    },
    {
        “rel” : “self”,
        “href” : “https://host:port/customers/customer/7489”,
        “action” : “DELETE”,
        “types” : []
    }
]
}

'[ARC] App Design > API Design' 카테고리의 다른 글

[API 설계] API Versioning  (0) 2022.06.20
[API 설계] Rest API 표준  (0) 2022.06.20
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기