REST 는 REpresentational State Transfer 의 줄임말이다.
representational 의 뜻은 표현적인, 묘사적인 이라는 뜻이고 state 는 상태, transfer 은 전송이라는 뜻이다.
즉 자원을 자원의 표현으로 구분하여 상태를 전송한다는 뜻이다.
API 는 서로 다른 응용 프로그램 간의 상호 작용 및 통신을 허용하는 기능과 규칙을 제공한다.
이러한 인터페이스는 애플리케이션 통합을 용이하게 하여 개발자가 강력한 디지털 제품을 만들 수 있도록 한다.
예를 들어서 TV가 있다면, TV의 전원을 제어하거나, 볼륨을 제어하기 위해 리모컨이 있고
자판기에는 버튼, 컴퓨터에는 마우스와 키보드가 있다.
즉 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 응답을 받을 수 있는 수단은 API라고 한다.
리소스는 미디어, DB데이터 등을 모두 포함된다.
CRUD는 CREATE, READ, UPDATE, DELETE 의 줄임말이다.
즉 자원들을 해당 형식에 맞는 상태를 응답에 맞게 전송하는 것이다.
자원은 서버에 존재하는 데이터 총칭이다.
모든 자원은 고유의 URI(URL)을 가지며 클라이언트는 이 URI를 지정하여 해당 자원에 대해 CRUD 명령을 수행할 수 있다. (ex: /resource/1)
클라이언트는 이 URI를 이용해서 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
행위 (Verb)
행위는 클라이언트가 HTTP Method를 이용하여 자원을 조작하는 것을 의미한다.
표현(Representation)
클라이언트가 HTTP Method로 자원을 조작하면 서버가 그에 대한 응답(JSON, XML)을 보내는 것을 의미한다.
자원이 있는쪽이 서버, 자원을 요청하는 쪽이 클라이언트가 된다.
서버 : API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.
클라이언트: 사용자 인증이나 context(세션, 로그인 정보) 등을 직접 관리하고 책임진다.
예를 들어 네이버에서 로그인을 한다고 가정했을때, 네이버 서버(REST API의 서버)가 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지고
로그인 하는 브라우저 환경(클라이언트)가 사용자 인증과 context 등을 직접 관리하고 책임지는 것이다.
pc, 모바일, 프린터 등등 많은 기기에서 서버- 클라이언트 개념이 쓰이기 때문에 정의는 다양하지만
웹에서의 서버-클라이언트 관계는 위처럼 이루어져있다.
HTTP 를 이용하는 만큼 Stateless의 특성을 지닌다.
클라이언트의 정보들을 Server에 저장하지 않는다.
즉, 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해진다.
각 API 서버는 Client의 요청만을 단순 처리한다.
각각의 요청에 대한 정보를 저장하지 않고 별개의 요청으로 처리한다.
HTTP를 사용하기 때문에 웹의 기본 인프라를 사용할 수 있다.
따라서 캐시 기능을 이용해 같은 URI에 대한 반복된 요청을 효율적으로 처리할 수 있다.
HTTP를 사용할 수 있는 환경이라면 플랫폼에 상관없이 사용할 수 있으며 특정 언어나 기술에 상관 없이 같은 형태의 요청으로 처리된다.
JSON, XML 등을 이용하는 메세지 구조로 해당 메세지가 무엇을, 어떤 행위를 의미하는지 직관적으로 이해할 수 있다.
클라이언트는 대상 서버와 직접 통신하는지 아니면 중간 서버와 통신하는지 알 수 없다.
따라서 클라이언트와 서버의 통신 사이에 보안이나 로드 밸런싱등을 위한 중간 계층을 추가할 수 있다.
API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다.
또한 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있다.
HTTP 를 사용하기 때문에 별도의 인프라를 구축할 필요가 없다.
클라이언트와 서버가 REST API를 통해 정보를 주고 받기 때문에 둘간의 역할이 분명해진다.
HTTP 가 사용가능한 환경이라면 어디서든지 사용 가능하다.
메세지가 자체적으로 의미하는 바를 담고 있기 때문에 사용이 간편하다.
무엇이 정확한 REST API 인지 표준이 존재하지 않기때문에 REST API 의 특징대로 설계하지 않으면 REST API 를 사용하는 의미가 없어진다.
HTTP 메서드를 사용하기 때문에 CRUD 라는 단순한 행위의 메서드들을 지원한다.
REST 에서는 리소스를 JSON 이나 XML 등의 형태로 표현하는데, 이는 관계형데이터베이스 와 맞지 않는 형태여서 NO SQL 을 사용한다.