월드와이드웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식.
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처
REST 아키텍처는 2000년 로이 필딩이라는 컴퓨터 과학자에 의해 탄생한 개념.
로이 필딩은 HTTP 1.0, 1.1 의 설계자로서 HTTP 프로토콜을 통한 웹 표준화에 엄청난 기여를 했다.
단순히 하나의 브라우저만 지원하면 되었던 이전과는 달리, 최근의 서버 프로그램은 여러 웹 브라우저는 물론이며, 아이폰, 안드로이드 애플리케이션과의 통신에 대응할 수 있어야 한다. 따라서 플랫폼에 맞추어 새로운 서버를 만드는 수고를 들이지 않기 위해 범용적으로 사용성을 보장하는 서버 디자인이 필요하게 되었다.
로이 필딩은 그 당시 웹 설계의 우수성에 비해 제대로 사용되지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST 를 발표했다.
위의 API 들은 무엇을 의미할까?
첫 번째 API 는 아마도 안드로이드 크루들의 정보를 가져오는 API,
두번째는 마지막에 id 가 적혀있는 것으로 보아 안드로이드 크루 중 id가 1인 크루의 정보를 가져오는 API,
마지막은 안드로이드 크루 중 id가 1인 크루의 정보를 삭제하는 API 일 것이다.
메시지만 봐도 이 API 가 어떤 동작을 할지 예상이 가능하다.
이것은 RESTFUL API 의 가장 큰 특징으로, REST 아키텍처를 준수한 RESTFUL API는 요청 메시지만 보고도 무엇을 원하는지 파악이 가능하다!
cf. URI 와 URL
URI 는 URL과 URN 을 포함하고 있다.
URI - 자원의 식별자
URL - 위치, 즉 네트워크 상에서 자원이 어디 있는지 위치를 알려주기 위한 규약
예를 들어 http://www.naver.com/index.html?page=1232950&id=776 링크가 있다고 하자.
http://www.naver.com/ 서버에 위치한 index.html 페이지는 query string인 page의 값에 따라 여러가지 화면 결과를 나타나게 된다.
이때 여기서 URL은 index.html의 위치를 표기한 http://www.naver.com/index.html 까지이다.
하지만 사용자가 원하는 정보에 도달 하기위해서는 ?page=1232950&id=776라는 식별자(Identifier)가 필요한 것이다.
따라서 엄격히 구분하자면 위의 http://www.naver.com/index.html?page=1232950&id=776 주소는 URI이고, 식별자가 빠진 http://www.naver.com/index.html를 URL이라고 하는 것이다.
REST 에서 자원에 대한 모든 행위는 HTTP METHOD 로 표현한다.
HTTP METHOD 에는 GET, POST, PUT, PATCH, DELETE 등이 있다.
HTTP METHOD 는 리소스에 대해 수행해야 하는 작업을 서버에 알려준다. 서버는 HTTP METHOD 에 따라 리소스에 대한 작업을 수행하게 된다.
표현이란 클라이언트가 전달받고자 하는 형식을 지정한다는 의미이다.
보통 클라이언트 요청 헤더를 통해 구현이 된다.
Accept 헤더를 이용해 응답 타입을 지정해줄 수 있다.
EX) Accept: image/png, Accept: text/html
REST 에서는 기존 우리가 알고있던 HTTP 통신 방식을 다음과 같이 해석한다.
클라이언트는 원하는 자원가 그 표현을 요청하고 서버는 표현을 선택해서 전송한다.
서버는 자원이 아닌 자원의 표현을 응답으로 보낸다.
다섯가지의 설계원칙이 있지만 Uniform Interface 를 제외한 나머지 제약사항은 HTTP 프로토콜을 이용하는 것 만으로도 지켜질 수 있는 제약사항들이다. 따라서 개발자들이 api 설계 시 Uniform Interface 원칙을 지키는 것에 집중을 해서 구현을 하면 된다. 더 자세한 Uniform Interface 설명은 여기서
이 게시물에서 다룬 개념은 로이필딩의 180쪽짜리 논문의 일부분만 정리한 것이다.
로이필딩은 REST 아키텍처 스타일에 제시된 제약조건들을 모두 따라야 Restful API 라고 말한다.
그러나 사실 오늘날의 대부분의 api 는 REST를 모두 준수하지는 않는다.
로이필딩은 애초에 레스트는 비효율적이라는 말과 함께 다음과 같은 말을 남겼다. “ 시스템 전체를 통제할 수 있다고 생각하거나, 진화에 관심이 없다면 REST에 대해 따지느라 시간을 낭비하지 마라“
Rest 를 꼭 전부 따라야하는것은 아니다. 모든 원칙을 지켜 레스트풀한 에이피아를 개발할지, 레스트 원칙 중 지킬 수 있는 부분 필요한 부분만 적용할것인지는 APi를 설계하는 이들이 자신의 상황에 맞게 스스로 판단하여 결정하면 된다고 생각한다.
참고 링크