REST는 REpresentational State Transfer의 약자이다.
2000년에 Roy Fielding은 웹 서비스를 디자인하는 아키텍처 접근 방식으로 REST를 제안했다. REST API는 웹에서 사용되는 데이터나 자원을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청(Request)과 응답(Response)을 정의하는 방식을 말한다.
GET
, POST
, PUT
, PATCH
, DELETE
이다.2008년에 Leonard Richardson은 WEB API에 대해 4단계 성숙도 모델을 제안했다. REST의 영광이 … 어쩐지 천국으로 가는 계단같다 🙀
HTTP 프로토콜을 단순히 원격 통신을 위한 전송 시스템으로 사용한다. POX(Plain Old XML)을 주고 받는 기본 단계이다.
리소스를 도입한다. 개별 리소스에 대한 별도의 HTTP URI로 표현해야 하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다.
/doctor/1
HTTP 메서드를 사용하여 리소스에 대한 작업(CRUD, Create, Read, Update, Delete)을 정의한다. 앞서 0, 1단계에서 CRUD에 관계없이 POST를 사용한 것과 비교된다.
?
를 사용하여 필요한 리소스를 전달한다.201 Created
로 명확하게 작성해야 하며, 클라이언트가 Location 헤더에 작성된 URI를 통해 확인할 수 있어야 한다.2단계에서 GET의 사용은 중요하다. HTTP는 GET을 어떤 순서로든 호출할 수 있고, 상태를 변화시키지 않고, 매번 같은 결과를 얻는 안전한 오퍼레이션으로 정의하기 때문에 캐싱을 할 수 있게 한다. HTTP의 규칙을 준수하면 이런 기능의 장점이 있다.
잠깐! 여기까지 적용했다면 일반적으로 잘 작성된 API라고 한다. 3단계는 정말 Glory한 영역 😅
Fielding의 정의에 따르면 진정한 RESTful API는 3단계에 해당하며 그 전까지는 HTTP API라고 불러야 한단다. 일반적으로 게시된 많은 Web API는 2단계의 어딘가에 해당한다.
하이퍼미디어(HATEOAS)를 사용한다. (Hypertext As The Engine Of Application State 의 약자. 헤이트오아스? 끔찍한 약자다.) 요청은 2단계와 동일하다. 하이퍼 미디어 컨트롤의 요점은 ‘다음에 무엇을 할 수 있는지’와 ‘어떻게 할지’를 응답에서 리소스의 URI로 알려주는 것이다.
REST의 요소가 무엇인지 알 수 있는 좋은 방법이지만, REST 자체의 레벨 정의가 아님을 강조한다. 단지 RMM의 유용한 점은 RESTful이 내포하고 있는 기본적인 생각들을 이해하기 위해 점진적인 방법을 제공한다는 것이다. 이를테면,
파면 팔수록 말이 정말 어렵게 느껴진다. 그리고 필딩 박사님 기준이 너무 깐깐 엄격하신 것 같다. HTTP 메서드는 총 8개가 있는데, 이번에 나온 CRUD는 실습을 해보아도 좋겠다. 그리고 이번에 등장한 난생 처음 들어본 멱등성에 관한 개념도 같이 정리해보면 좋을 것 같다. ::TODO::