REST는 웹 기반 시스템에서 리소스를 효율적으로 관리하고 접근하기 위한 아키텍처 스타일이다.
즉, REST는 "웹의 리소스를 URL을 통해 식별하고, HTTP를 사용하여 상태를 전송하는 방식"
| 원칙 | 설명 |
|---|---|
| 클라이언트-서버 구조 | 클라이언트와 서버를 분리하여 독립적 확장 가능 |
| 무상태성 (Stateless) | 서버는 클라이언트의 상태를 저장하지 않음(각 요청이 독립적) |
| 캐시 가능 (Cacheable) | 응답 데이터를 캐시할 수 있도록 설계 가능 |
| 계층화 시스템 (Layered System) | 클라이언트-서버 사이에 프록시, 로드 밸런서 등을 둘 수 있음 |
| 일관된 인터페이스 (Uniform Interface) | URI, HTTP 메서드, 응답 형식(JSON/XML) 등 표준화 |
| 코드 온 디맨드 (선택 사항) | 서버가 클라이언트에 실행 가능한 코드를 제공할 수 있음 (예: JavaScript) |
이 원칙들을 따르면 RESTful한 시스템이 됨
REST API는 REST 원칙을 따르는 API(애플리케이션 프로그래밍 인터페이스)이다.
즉, RESTful한 방식으로 클라이언트와 서버가 데이터를 주고받는 API
| 특징 | 설명 |
|---|---|
| 클라이언트-서버 구조 | 프론트엔드(클라이언트)와 백엔드(서버)를 분리 |
| 무상태(Stateless) | 요청 간의 상태 정보 저장 X (필요하면 토큰 사용) |
| 리소스 기반 | URL을 사용해 리소스 식별 (명확한 엔드포인트) |
| 표준 HTTP 메서드 사용 | GET, POST, PUT, DELETE 활용 |
| JSON 형식 응답 | 일반적으로 JSON 데이터 포맷 사용 |
REST API는 URI + HTTP 메서드 + JSON 응답 구조를 가짐
GET /getUser?id=123
POST /createUser
GET /users/123
POST /users
PUT /users/123
DELETE /users/123
/users vs /user)/user/123/posts)| HTTP 메서드 | 목적 |
|---|---|
| GET | 리소스 조회 |
| POST | 새 리소스 생성 |
| PUT | 기존 리소스 전체 수정 |
| PATCH | 기존 리소스 일부 수정 |
| DELETE | 리소스 삭제 |
RESTful API는 HTTP 메서드를 활용하여 CRUD(Create, Read, Update, Delete)를 구현.
REST API는 일반적으로 JSON 형식으로 데이터를 응답한다.
GET /users/123){
"id": 123,
"name": "Alice",
"email": "alice@example.com"
}
POST /users){
"message": "User created successfully",
"user": {
"id": 124,
"name": "Bob",
"email": "bob@example.com"
}
}
400 Bad Request){
"error": "Invalid email format"
}
401 Unauthorised){
"error": "Authentication required"
}
404 Not Found){
"error": "User not found"
}
REST API는 적절한 HTTP 상태 코드와 JSON 메시지를 포함하여 응답을 구성
| 장점 | 설명 |
|---|---|
| 확장성 | 클라이언트-서버 분리로 독립적인 확장 가능 |
| 표준화 | HTTP 메서드 및 URI 구조 활용 |
| 언어 독립적 | JSON 기반 응답으로 다양한 클라이언트 지원 |
| 캐싱 가능 | GET 요청 응답을 캐시하여 성능 최적화 |
| 단점 | 설명 |
|---|---|
| 과도한 요청 (Over-fetching) | 필요 이상의 데이터가 전송될 수 있음 |
| 데이터 조합 어려움 (Under-fetching) | 여러 API 호출이 필요할 수 있음 |
| 실시간 처리 부족 | WebSocket 같은 실시간 통신 방식 부족 |
GraphQL, gRPC 같은 대안 기술이 등장했지만, REST API는 여전히 널리 사용됨
REST API는 웹과 모바일에서 가장 널리 사용되는 API 방식