REST API
API
Application Programming Interface
응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있께 만든 인터페이스
API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있음
여기서 인터페이스는 어떤 장치간 정보를 주고 받는 방법을 말한다.
i.e. 마우스, 키보드, 터치패드
REST
Representational State Transfer, 자원 상태 전달?
자원을 이름으로 구분하여 자원의 상태를 교환하는 것을 의미
서버와 클라이언트 통신 방식 중 하나
HTTP URI를 통해Resource을 명시하고,HTTP Method를 통해 해당Resource에 대한CRUD Operation을 적용하는 것- 자원을 교환하는 것
그 결과를
HTTP Status Code로 응답하는 것
Resource
Collection: 복수의 자원을 가리키는 자원https://api.example.com/topics
Element: 단수의 자원을 가리키는 자원https://api.example.com/topics/1234https://api.example.com/topics/rest-api
Method
- CRUD Operation
- Create:
POST - Read:
GET - Update:
PUT,PATCH - Delete:
DELETE
- Create:
REST 특징
Server-Client 구조
- 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client
- 서버와 클라이언트가 독립적으로 분리되어 있어야 함
Stateless
- 요청 간의 클라이언트 정보가 서버에 저장되어서는 안됨 (규칙)
- 서버는 각 요청을 완전히 독립적으로 처리해야 함
- 이전 요청이 다음 요청에 영향을 주면 안됨
Cacheable
- 클라이언트는 응답을 캐시할 수 있어야 함
- HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 사용할 수 있음
- 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용
- 클라이언트는 응답을 캐시할 수 있어야 함
계층화 (Layered System)
- 클라이언트는 서버의 구성과 상관없이 REST API 서버로 요청
- 서버는 다중 계층으로 구성될 수 있음 (로드 밸런싱, 보안 요소, 캐시 등)
Code on Demand (Optional)
- 요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달하여 클라이언트 기능 확장
인터페이스 일관성 (Uniform Interface)
- 정보가 표준 형식으로 전송되기 위해 구성 요소간 통합 인터페이스를 제공
- HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계
REST 장점
- HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환가능
- 서버와 클라이언트의 역할을 명확하게 분리
- 여러 서비스 설계에서 생길 수 있는 문제를 최소화
REST API
- REST 아키텍처의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스
RESTful: REST 아키텍처를 구현하는 웹 서비스
REST API 특징
- REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높임
- HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있음
REST API 설계 규칙
웹기반의 REST API를 설계할 경우에는 URI를 통해 자원을 표현해야 함
https://api.example.com/v1/users/1234- Resource: users
- Resource ID: 1234
⭐ 자원에 대한 조작은
Method를 통해 표현해야 함URI에 행위가 들어가면 안됨URI는 자원을 표현
- HEADER를 통해 CRUD를 표현하여 동작을 요청해야 함
메세지를 통한 리소스 조작
- HEADER를 통해 content-type을 지정하여 데이터를 전달
- 대표적 형식으로는 HTML, XML, JSON, TEXT 등이 있음
- 이건
REST가 정의하는 것이 아님
- 이건
문법, 표기법
- URI에는 소문자를 사용
- Resource의 이름이나 URI가 길어질 경우 하이픈(-)을 사용
- 언더바(_)는 사용하지 않음
- 파일 확장자는 URI에 포함하지 않음