IT 지식/REST API

[REST API] Self-descriptive messages

냠냠:) 2021. 7. 18. 22:59

REST 아키텍처 중 Uniform Interface의 self-descriptive messages를 정리한 내용입니다.

self-descriptive messages

유니폼 인터페이스 아키텍처 스타일 중 메세지 스스로 메세지에 대한 설명이 가능해야한다라는 뜻을 가진 제약 조건이다.
서버가 변해서 메세지가 변해도 클라이언트는 그 메세지를 보고 해석이 가능해야하며, 이를 통해 확장 가능한 커뮤니케이션을 달성하는 것이 self-descriptive messages의 목표이다.

Uniform Interface : URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다는 REST 아키텍처 요소 중 하나

 

self-descriptive messages는 수신자가 메세지를 이해하는 데 필요한 모든 정보가 메세지에 자체에 포함되어 있어야 한다.

 

이것을 HTTP 요청/응답으로 살펴보자

 

요청

GET / HTTP/1.1
GET / HTTP/1.1
Host: www.naver.com

첫 번째 요청은 HTTP 방법과 사용된 프로토콜이 뭔지 알려주지만, 목적지가 없기 때문에
self-descriptive하지 못하지만,
두 번째 요청은 목적지 주소가 존재하기 때문에 해당 메세지가 어떤 메세지인지 알 수 있다. 그러므로 self-descriptive하다고 말할 수 있다.

 

응답

HTTP/1.1 200 OK

[ {op: "Add", path: "al/ew/qw" } ]

응답 메세지는 본문에 JSON 형식의 데이터를 담고 있다. 하지만 클라이언트가 해당 본문이 어떤 데이터 형식인지 알 수 없다.

HTTP/1.1 200 OK
Content-Type: application/json


[ {op: "Add", path: "al/ew/qw" } ]

이렇게 Content-Type을 추가하면 이제 클라이언트는 해당 데이터 형식이 json임을 알 수 있다. 그러나, 아직 op가 어떤 의미고 path가 어떤 의미인지는 모른다.

HTTP/1.1 200 OK
Content-Type: application/json-patch+json


[ {op: "Add", path: "al/ew/qw" } ]

json-patch+json로 Content-Type을 지정해줌으로써 op의 뜻을 알 수 있게 됐다.
json-patch+json를 설명하는 사이트인데, 국제 인터넷 표준화 기구인 IETF에 미디어 타입으로 등록이 되어있으며, 해당 사이트에서 op를 포함한 json-patch+json의 데이터의 의미를 알 수 있다.
이제 해당 메세지는 self-descriptive해진 것이다.

개발자가 IANA에 미디어 타입을 등록해서 리소스를 리턴할 때 Content-Type으로 사용할 수 있다.

 

위와 같은 방식으로 self-descriptive messages를 달성할 수 있는 방법 외에도
profile 링크에 해당 메세지의 의미를 알 수 있는 문서를 추가함으로써 달성할 수 있다.

HTTP/1.1 200 OK 
Content-Type: application/hal+json 

{ "_links" : { 
    "profile" : { 
            "href" : "http://example.com/docs/profile" 
        }
    } 
}

 

*HTML을 반환하는 방식은 self-descriptive messages를 잘 지키는 방식 중 하나다.

HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html>
  <head>
    <title>Home Page</title>
  </head>
  </body>
    <div>Hello World!</div>
    <a href= “http://www.recurse.com”> Check out the Recurse Center! </a>
    <img src="awesome-pic.jpg">
  </body>
</html>



정리

  • self-descriptive messages은 REST의 Uniform Interface 제약조건 중 하나다.
  • 오늘날 REST API라 부르는 API는 Self-descriptive 를 잘 만족하지 못한다.
  • 서버나 클라이언트가 변경되더라도 오고 가는 메시지는 언제나 self-descriptive하므로 언제나 해석이 가능하다.



자료 출처

반응형

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

[REST API] HATEOAS  (0) 2021.07.20
[REST API] REST란  (0) 2021.06.27