REST는 HTTP URI를 통해 자원을 명시하고, HTTP 메서드(Get, Post, Put, Delete)로 해당 자원에 대해 삽입, 조회, 갱신, 변경 명령을 적용할 수 있는 소프트웨어 아키텍처
Application Programming Interface
응용프로그램이 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 하는 인터페이스
URI : 리소스, 리소스를 명사형태로 표현
Method
Message : json, xml같은 메시지 포맷으로 메시지를 응답
idempotent란 한 번 요청했을 때와 두 번 이상 요청했을 때 시스템의 상태가 동일한 것을 얘기한다.
예를 들어
POST idempotent하지 않다.
HTTP 표준에만 따른다면, 어떠한 기술이라던지 사용이 가능한 인터페이스 스타일
ex. REST API 정의를 HTTP + JSON로 하였다면, C, Java, Python, IOS 플랫폼 등 특정 언어나 기술에 종속 받지 않고, 모든 플랫폼에 사용이 가능.
API 메시지만 보고, API를 이해할 수 있는 구조 (Resource,Method를 이용해 무슨 행위를 하는지 직관적으로 이해할 수 있다.)
HTTP Session과 같은 컨텍스트 저장소에 상태 정보 저장하지 않아서 요청과 요청 사이에 공유 되는 상태가 없다.
단순히 message같은 것을 통해 데이터를 전달하면 되므로, 구현이 단순해짐
Hypermedia As the Engine Of Application State
[ 장점 ]
API만 봐도 쉽게 이해할 수 있고 사용이 쉽다 : REST API 의 URI, 메서드, 메시지를 읽는 것만으로도 메시지가 의도하는 바를 파악할 수 있어서 굳이 기능이 무엇인지 알아야할 필요가 없다. 또한 서버에서 진행된 내용들을 클라이언트가 알지않아도 되서 해당 URI와 원하는 메소드 자체만 독립적으로 이해하기만 하면 됨
[ 단점 ]
표준의 부재 : 표준이 존재하지 않아서 관리의 어려움과 공식화된 API 디자인 가이드가 존재하지 않는다.
Rest API의 단점을 해결할 수 있는 표준화된 쿼리 언어
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Web/%5BWeb%5D%20REST%20API.md