REST API란?
REST : Representational State Transfer 의 약자로 '네트워크에서 통신을 구성할 때 이런 구조로 설계하라는 지침' 정도로 볼 수 있다.
API : ApplicationProgrammingInterface 의 약자로 응용 프로그램 프로그래밍 인터페이스를 뜻한다. 프로그램을 작성하기 위한 일련의 부프로그램, 프로토콜 등을 정의하여 상호 작용을 하기위한 인터페이스 사양을 말한다.
REST API : API는 주로 프로그램 내부 단에서 이루어진다. 하지만 보다 다양한 분야에 쓰일수 있도록 '네트워크'와 '웹'에 맞춰진 API 통신 아키텍쳐가 등장했한것이 REST API이다. 주로 웹 API 쪽에서 사용된다. 웹 API = REST API 라고 봐도 볼 수있다. 현실적으로 네트워크의 99.99%는 인터넷이라부르는 HTTP 기반 네트워크 이므로 REST API라고 하면 HTTP에 쓰이는걸 의미하는 경우가 많다. 그냥 API 라고 말하면 REST API를 의미하는 경우도 많아졌다.
RESTful API : REST를 잘 준수하는 API를 말한다. REST하지 않아도 RESTful API 라고 부르는 경우가 종종 있다. 엄밀히 따지면 REST 요소를 지키지 않은 HTTP API는 그냥 웹 API 혹은 HTTP API 라고 불러야한다.
[REST]
자원(Resource) : HTTP URI (URI : Uniform Resource Identifier : 자원을 식별하기 위한 문자열의 구성) ( ex : https://example.com/user/ABC ' / ' 는 계층관계를 의미)
행위(Verb) : HTTP Method (GET, POST, PUT, DELETE 등)
표현(Representations) : HTTP Message, JSON, XML, RSS 등
REST의 특징
Client-Server(클라이언트-서버 구조) : 클라이언트와 서버로 분리되어야하며 서로 의존성이 없어야 한다.
= REST Server 는 API를 제공하고 비지니스 로직 처리 및 저장을 책임짐. Client는 사용자 인증이나 context(세션, 로그인 정보)등을 관리하고 책임짐
Stateless(무상태성) : 상태 정보를 따로 저장하지 않으며, 이용자가 누구인지 혹은 어디서 접근하는지와 관계 없이 결과가 무조건 동일해야한다. 따라서 REST API는 필연적으로 오픈될 수 밖에 없다.
= Client의 context를 Server에 저장하지 않음, Server는 모든 요청을 완전히 별개의 요청으로 처리함
Cache(캐시 처리 기능) : HTTP를 비롯한 네트워크 프로토콜에서 제공하는 캐싱 기능을 적용할 수 있어야 한다.
= 대량의 요청을 효율적으로 처리 가능
Uniform Interface(인터페이스 일관성) : 데이터가 표준 형식으로 전송될 수 있도록 구성 요소 간 통합 인터페이스를 사용한다. REST API 태반이 HTTP를 사용하기 때문에 HTTP 표준인 URL과 응답코드, Request-Response Method 등을 사용한다.
= 특정 언어나 기술에 종속되지 않음
Layered System(계층 구조) : API는 REST 조건을 만족하면 필연적으로 오픈될 수 밖에 없기 때문에, 요청된 정보를 검색하는데 있어 계층 구조로 분리되어야 한다.
Self-descriptiveness(자체 표현) : API를 통해 전송되는 내용은 별도 문서 없이 쉽게 이해할 수 있도록 자체 표현 구조를 지녀야 한다. 마찬가지로 웹 표준인 JSON과 XML이 주로 사용된다.
[REST API]
REST의 특징을 기반으로한 웹 API
구글, 네이버, 카카오등 IT 회사라면 각 회사의 서비스를 활용할 수 있는 REST API를 지원한다.
[REST API의 특징]
각 요청이 어떤 동작이나 정보를 위한 것인지 요청 그 자체로 추론이 가능
[REST API의 작동 방식]
HTTP 요청을 통해 통신함으로써 리소스 내에서 레코드의 CRUD등을 수행함. (ex : GET 요청을 사용해 레코드를 검색, POST 요청으로 레코드 작성 등)
클라이언트가 서버에 요청함. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정.
서버가 클라이언트를 인증. 해당 요청을 수행할 수 있는 권한이 있는지 확인.
서버가 요청을 수신. 내부적으로 처리.
서버가 클라이언트에 응답을 반환. 응답에는 요청 성공여부 정보, 요청한 모든 정보 등이 포함됨.
[REST API 디자인 가이드]
URI는 정보의 자원을 표현해야 한다
자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표한한다.