Representational State Trasfer의 약자로 아키텍쳐의 형식 중 하나 입니다.
REST의 의미 그대로 자원을 이름으로 구분하여 Client와 Server가 해당 자원의 상태를 주고 받는 것을 의미합니다.
HTTP 프로토콜을 사용하므로 웹표준을 모두 활용 가능한 형식입니다.
REST의 탄생 배경과 의미
REST API는 2000년에 HTTP를 잘 활용하지 못한다고 생각한 로이 필딩이 웹을 장점을 살릴 수 있는 아키텍쳐인 REST를 탄생시켰습니다. 이러한 탄생의 배경에는, 단순 브라우저만 사용하는 것이 아닌 다양한 앱의 탄생이 있습니다.
웹브라우저만 사용되던 과거와 달리 현재는 웹/앱 앱에서도 IOS/Android 등 다양한 환경과 통신해야 하기 때문에 각각 다른 API를 작성하는 것은 시간과 자본의 낭비가 발생합니다. 그러므로 범용성을 가진 서버를 디자인의 수요가 생겼습니다.
하지만, 획일화된 Client side를 사용하지 않는 만큼 표준을 정확히 정해야 합니다.
표준을 지키지 않으면 다양한 Client side에 범용적으로 사용할 수 없으며 개발 속도 저하를 발생시킵니다.
REST의 구성
자원
모든 자원에는 고유한 id가 존재하고, Server(아마 DB)에 존재합니다.
URL에 표기된 주소를 나타냅니다.
행위
REST는 HTTP의 네가지 Method만을 사용합니다.
C.R.U.D Method를 사용할 때 멱등성(idemponent)에 대해서도 알아봅시다.
멱등성이란, 연산의 한 성질을 말하며, 여러 번 연산해도 결과값 변화가 없는 성질을 말한다. C.R.U.D 중에 Create(POST)는 멱등성이 적용되지 않습니다.
GET 메소드의 조회수 같은 경우, 예외적으로 멱등성이 적용되지 않습니다. 글자체를 조회하는 기능이지만 조회수 카운터가 올라가는것 때문에 POST를 사용하면, GET메소드의 캐싱기능을 활용할 수 없습니다. 그러므로 GET을 사용해서 조회하되, HEADER로 조회수를 보내야 합니다.
표현
Client가 자원에 정보를 담아 요청하면 Server는 적절한 응답을 보내주어야 합니다.
JSON, XML 등의 구조로 통신할 수 있습니다. 최근에는 Key, Value 형태의 JSON을 많이 사용합니다.
Client / Server 구조
무상태성(Stateless)
캐시 처리 가능(Cashable)
계층 시스템(Layered System)
유니폼 인터페이스
REST는 모두의 편의를 위해 형태에 대한 일정한 제약을 가지고 있습니다.
Resource identification in requests
클라이언트가 요청할 때 필요한 정보는 리소스에 담아서 보내고, 서버는 JSON, XML와 같은 형태로 요청에 적합한 정보를 응답합니다.
Resource manipulation through representations
클라이언트가 어떤 정보나 리소스의 상징이나 표현만 가지고 있더라도 이를 이용하여 실제 리소스의 상태를 변경시킬 수 있습니다. (URL과 API설계로 인함)
Self-descriptive messages
각각의 메시지는 어떤 식으로 처리하면 되는지에 대한 정보를 담고 있습니다. 예를 들어, 어떤 종류의 에러가 발생했고 필요한 요청이 무엇인지를 특정할 수 있습니다.
[출처]