RESTful API(2) - HATEOAS

sudal·2023년 7월 28일

RESTful API

목록 보기
2/2

HATEOAS 란?

Hypermedia as the Engine of Application State(HATEOAS)는 REST의 uniform interface 제약조건 중 하나입니다.
이름을 보면 하이퍼미디어를 마치 애플리케이션 상태의 원동력으로 보는것과 같은 느낌을 줍니다.

이 제약조건은 서버가 클라이언트에게 리소스의 표현을 전달 할 때, 리소스 사용시 필요한 하이퍼미디어 링크를 함께 보내는 것을 의미 합니다.
이렇게 하게 되면 클라이언트측에서 링크를 따라가기만 하는것으로 모든 기능을 구현할 수 있어 클라이언트측의 복잡성을 낮추고, 서버측에서 관련 URI를 변경하여도 클라이언트측에서는 변경할 필요가 없게 되어 유지 보수성이 향상됩니다.

HATEOAS는 두 가지 방법을 이용하여 구현할 수 있습니다.(둘중 어느것도 정해진 정답이 없습니다.)
아래는 HTTP response header 를 이용한 방식의 예 입니다.

HTTP/1.1 200 OK
...
Link: <10/employees>; rel="employees"

아래는 HTTP response body 를 이용한 방식의 예 입니다.

{ 
	"departmentId": 10, 
    "departmentName": "Administration", 
    "locationId": 1700, 
    "managerId": 200, 
    "links": [ 
    	{ 
         "href": "10/employees", 
         "rel": "employees", 
         "type" : "GET" 
        } 	] 
}

실무에서의 한계

위의 HATEOAS 개념만 봐서는 완벽한 것처럼 보이지만 실제 실무를 하다 보면 한계에 부딪치게 됩니다.
이유는 다음과 같습니다.

  • 첫 번째 이유는 서버에서 필요한 링크를 전부 구현하는 것은 API 복잡성을 증가시킵니다. 모든 관련된 리소스를 전부 링크로 포함하는 것은 많은 작업이 필요합니다.
  • 두 번째 이유는 라이브러리의 지원 문제입니다. HATEOAS를 지원하는 라이브러리가 존재 하지 않거나 불완전하다면 동적으로 변동되는 URI를 직접 개발해야 하는 상황이 오게 되는데 이는 매우 까다로운 작업일 것으로 예상됩니다.
  • 세 번째 이유는 클라이언트에서 링크를 따라가며 직접 구현하는 것은 API 문서를 보면서 개발하는 것보다 복잡하게 만들 수 있습니다.

결론

HATEOAS를 완벽하게 구현할 필요 없이, 상황에 따라 적절하게 반영하면 됩니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

유익한 글이었습니다.

답글 달기