REST(Representational State Transfer)
자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 것을 의미한다.
REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌으며, REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있게 되었다.
REST API는 HTTP 요청을 통해 통신하여 데이터 생성, 읽기, 업데이트 및 삭제 기능을 완료한다. CRUD 작업이라고도 한다.
※ REST에서의 CRUD Operation 동작
- Create : 데이터 생성(POST)
- Read : 데이터 조회(GET)
- Update : 데이터 수정(PUT, PATCH)
- Delete : 데이터 삭제(DELETE)
RESTful API
RESTFUL이란 REST의 원리를 따라 REST API의 설계 규칙을 올바르게 지킨 시스템을 말한다.
: 클라이언트와 서버를 분리함으로써, 서로 의존하지 않는 구조.
사용자들에게 제공하는 interface인 User Interface와 데이터 스토리지, 알고리즘 등 서버 내부의 작업들을 분리함으로 써 User Interface는 여러 플랫폼에서의 이식성을 향상될 수 있으며, 서버는 그 구성요소를 단순화하여 확장성을 단순화할 수 있다.
: 클라이언트에서 서버로의 각 요청에는 그 요청을 이해하는 데 필요한 모든 정보가 포함되어야 한다.
서버에 저장된 환경 정보를 이용해서 이득[서버에서의 클라이언트 정보 유지 등]을 취하면 안된다. 따라서 세션의 정보는 전적으로 클라이언트가 가지고 있어야 한다.
ex) 로그인했다는 세션 유지가 필요한 경우 - JWT를 사용하여 Client가 해당 정보를 가지고 서버에 전달
: 각 응답에는 캐시 가능 여부와 응답을 캐시할 수 있는 기간을 알려주는 정보가 있어야 한다.(성능, 가용성 개선에 도움)
: 계층화된 시스템 아키텍처를 사용하여 각 구성들 간의 계층이 마음대로 상호작용 할 수 없도록 제한함으로써 Interface를 일원화.
클라이언트는 서버에 직접 연결되었는지, 중간 서버를 통해 연결되었는지 알 수 없어야 한다.
: 전체적인 시스템 아키텍처를 잘 파악할 수 있도록 하기 위한 명료하게 약속된 Interface를 제공해야 한다.
인터페이스를 일반화 시킴으로써 클라이언트 - 서버간의 결합도를 낮출 수 있다.
: 서버가 네트워크를 통해 클라이언트에 전달한 javascript 등과 같은 프로그램들은 그 자체로 실행이 될 수 있어야 한다.(사전 구현에 필요한 기능의 수를 줄임으로써 클라이언트를 단순화)