📌 여러 글을 참고하여 REST API 공부한것을 간략하게 정리해봤습니다.
REST API (Representational State Transfer)
HTTP Method + URI(Resource)를 이용하여 Endpoint를 만드는 REST Architecture를 따르는 API다.
- REST란, 웹에 존재하는 모든 리소스에 고유한 URI를 부여해서 활용하는 것으로 URI에 대한 행위를 HTTP Method로 정의하는 방식이다.
- URI에 Request를 전송하면 URI마다 전달받은 HTTP Method에 해당하는 포맷의 리소스를 Response로 보내준다.
- HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method를 통해 자원에 대한 CRUD Operation을 적용하는것을 의미한다.
- CRUD Operation
- POST : Creacte
- GET : Read
- PUT : Update
- DELETE : Delete
- HEAD : Header 정보 조회

RESTful Architecture의 가장 중요한 두가지 항목
- URI는 명사로 리소스를 표현해야한다.
- 리소스에 대한 행위는 HTTP Method로 표현해야한다.
Endpoint
- HTTP Method + URI로 API하나를 가리키는 고유한것을 Endpoint라고 한다.
- HTTP Method마다 같은 URI라도 다른 처리를 해줘야 하는데 이것을 구별하게 해주는 항목이 Endpoint다.
=> API마다 보통 하나의 역할만 한다.
REST 구성
Verb (행위) : HTTP Method 4가지
- GET - Read
- POST - Create
- PUT - Update
- DELETE - Delete
Representation of Resource (표현)
- Server에서 보내는 Response는 JSON, XML, TEXT, RSS등 여러 형태로 표현할 수 있다.
- JSON 혹은 XML을 통하여 데이터를 주고 받는것이 가장 일반적이다.
REST 특징
- Server - Client 구조
- 두 영역으로 분리하여 서버가 처리할 부분이 줄어들어 확장하기가 쉬워진다.
- Client가 사용자 인증이나 Context등을 관리할 수 있기 때문에 서로의 의존성이 줄어든다.
- 리소스가 있는 쪽이 Server, 요청하는 쪽이 Client이다.
- Stateless (무상태)
- HTTP 프로토콜이 Stateless Protocol이므로 REST역시 무상태성을 가지는 것이다.
- Client의 Context를 서버에 저장하지 않는다.
- 각각의 요청을 별개로 인식하여 처리한다.
- Cacheable (캐시 처리 가능)
- 웹표준 HTTP를 그대로 사용하므로 HTTP가 가지고 있는 캐싱 기능 등 웹에서 사용하는 기존의 인프라를 그대로 활용가능하다.
- HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
- Last-Modified Tag
- 엔터티가 마지막으로 변경된 시각에 대한 정보를 제공한다.
- E-Tag
- Message에 담겨있는 엔터티를 위한 엔터티 태그를 제공하고, 이를 활용하여 리소스를 식별할 수 있다.
- 캐싱된 캐시를 가진 중간 Proxy Server에 응답이 가므로 REST Server에 Transaction이 발생하지 않아서 응답시간, 성능, 서버의 리소스 이용률을 향상시킬 수 있다.
- Transaction이란, 쪼개질 수 없는 업무처리의 단위이고 중간에 한번이라도 에러가 발생하면 모든 작업을 원상태로 되돌린다.
- 웹 캐시란, 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP장치로 웹 요청이 Proxy Server에 도착했을때 캐싱된 로컬 사본이 존재한다면 서버가 아닌 캐시로 부터 문서가 제공된다.
- Cache Proxy Server가 있으면 최초의 Client를 제외한 Clients는 Proxy Server에서 정보를 받아 올 수 있다.

- Layered System (계층화)
- Client는 REST Server만 호출하는데, 실제로는 어느 서버와 직접 통신하는지 알 수 없다.
- REST Server는 보안, 로드밸런싱, 암호화, 사용자 인증 등을 위한 계층을 추가하여 다중 계층으로 구성될 수 있다.
- Proxy, Gateway같은 네트워크 기반의 중간 매체를 사용할 수 있다.
- Uniform Interface
- HTTP Method + URI로 통일되고 일정학 제약을 가진 인터페이스를 가진다.
- Code On Demand (Optional)
- REST Server에서 스크립트를 받아서 Client에서 실행한다.
- Self Descriptive (자체 표현 구조)
- REST Message만 보고 어떤 리소스인지 이해할 수 있다.
Resource
- 각 각의 데이터를 리소스라고 부르며, 리소스는 고유의 ID를 가지고 있다.
- 아래에 예시를 만들어 봤습니다.
- GET + stores >>> Store 리스트를 받을 수 있다.
- GET + stores/:id >>> 입력받은 id의 Store하나만 받을 수 있다.
- PUT + stores/:id >>> 입력받은 id의 리소스를 수정할 수 있다.
.png)
Reference
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://brainbackdoor.tistory.com/53