REST 란, Representational State Transfer 의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미합니다.
Respresentational State Transfer 는 HTTP URI 를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE) 를 통해 해당 자원에 대한 CRUD Operation 을 적용하는 것을 의미합니다.
REST 구성 요소
REST API 는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성됩니다.
자원(Resource) : HTTP URI
행위(Verb) : HTTP Method
표현(Representations) : HTTP Message
REST 의 특징
Server-Client (서버-클라이언트 구조)
REST Server : API 제공
Client : 사용자 인증이나 Context(세션, 로그인 정보) 등을 직접 관리하고 책임지는 측
Stateless (무상태)
HTTP 프로토콜은 Stateless Protocol 이므로 REST 역시 무상태성을 갖습니다.
Client 의 Context 를 Server 가 알 수 없으며, Request 만을 보고 처리하기 때문에 작업을 마치고 나면 Client 의 Context 는 사라집니다.
Server 는 각각의 요청을 완전히 별개의 것으로 인식하고 처리하므로, Client 의 이전 요청 정보를 현재 요청에서 참조할 수 없습니다.
Cacheable (캐시 처리 가능)
REST Server 는 HTTP 프로토콜을 그대로 사용하므로, 웹에서 사용하는 기존의 인프라를 그대로 활용이 가능합니다.
대량의 요청을 효율적으로 처리하기 위해 캐싱 기능을 적용할 수 있습니다.
Layered System (계층화)
REST Server 는 Proxy, Gateway 같은 네트워크 기반의 중간 매체를 통해 확장성이 좋은 구조로 설계할 수 있습니다.
Client 는 REST API Server 만 호출하면 되므로, REST Server 뒤에 다른 서버가 있어도 상관없습니다.
Uniform Interface (유니폼 인터페이스)
URI 를 통해 자원을 명시하고, HTTP Method 를 통해 해당 자원에 대한 CRUD Operation 을 적용합니다.
HTTP Method 를 통해 해당 자원에 대한 CRUD Operation 을 적용합니다.
REST API 의 특징
REST API 는 REST 기반으로 서비스 API를 구현한 것을 의미합니다.
REST 는 HTTP 표준을 기반으로 구현되었기 때문에, HTTP를 지원하는 프로그래밍 언어로 클라이언트/서버를 구현할 수 있습니다.
즉 REST API 를 제작하면, 해당 API 를 호출할 수 있는 클라이언트를 다양한 언어(Java, Python, Javascript, PHP, Ruby, C# 등)로 개발할 수 있습니다.