REST(Representational State Transfer) API는 웹 서비스를 설계하는 아키텍처 스타일이다. 2000년 Roy Fielding의 박사 논문에서 처음 제안됐으며, HTTP/HTTPS를 기반으로 리소스를 URL로 식별하고 메서드(GET, POST, PUT, DELETE)로 조작한다.
REST의 6가지 원칙
| 원칙 | 설명 |
|---|
| 클라이언트-서버 | UI와 데이터 저장 분리 |
| 무상태(Stateless) | 각 요청이 완전한 정보를 포함 (서버에 세션 저장 X) |
| 캐시 가능 | 응답에 캐시 여부 명시 |
| 계층화 시스템 | 클라이언트는 중간 서버 존재 여부를 모름 |
| 균일한 인터페이스 | 표준화된 방식으로 리소스 조작 |
| Code on Demand | 서버가 실행 코드 전달 가능 (선택적) |
URL 설계 규칙
✓ 좋은 URL 설계:
GET /users → 전체 사용자 목록
GET /users/123 → ID=123 사용자
POST /users → 사용자 생성
PUT /users/123 → 사용자 전체 수정
PATCH /users/123 → 사용자 부분 수정
DELETE /users/123 → 사용자 삭제
GET /users/123/orders → 사용자의 주문 목록
GET /users/123/orders/456 → 특정 주문
✗ 나쁜 URL 설계:
GET /getUsers → 동사 사용 금지
POST /createUser → 메서드로 행위 표현 금지
GET /user/all → 복수형 사용 권장
HTTP 응답 코드 활용
GET /users/123 → 200 OK (정상 조회)
POST /users → 201 Created (생성 성공)
PUT /users/123 → 200 OK or 204 No Content
DELETE /users/1 → 204 No Content (삭제 성공)
오류:
GET /users/999 → 404 Not Found (존재하지 않음)
POST /users → 400 Bad Request (잘못된 요청)
DELETE /users/1 → 403 Forbidden (권한 없음)
GET /users → 500 Internal Server Error (서버 오류)
JSON 응답 예시
json
GET /users/123
→
{
"id": 123,
"name": "Alice",
"email": "alice@example.com",
"createdAt": "2025-01-01T00:00:00Z"
}
GET /users?page=1&limit=10
→
{
"data": [...],
"pagination": {
"total": 100,
"page": 1,
"limit": 10,
"pages": 10
}
}
인증
# JWT Bearer Token
GET /api/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
# API Key
GET /api/data?api_key=abc123
X-API-Key: abc123
# Basic Auth (Base64 인코딩)
Authorization: Basic dXNlcjpwYXNz
| 항목 | REST | GraphQL | gRPC |
|---|
| 프로토콜 | HTTP | HTTP | HTTP/2 |
| 데이터 형식 | JSON | JSON | Protobuf (바이너리) |
| 유연성 | 고정 응답 | 클라이언트가 필드 선택 | 고정 스키마 |
| 속도 | 중간 | 중간 | 빠름 |
| 사용 사례 | 일반 웹 API | 복잡한 클라이언트 요구 | 마이크로서비스 |
관련 개념
- •HTTP/HTTPS — REST API의 통신 프로토콜
- •JWT — REST API 인증 토큰
- •JSON — REST API 기본 데이터 형식
- •네트워크 — API 통신 기반
참고문헌
- •Fielding, R. (2000). Architectural Styles and the Design of Network-based Software Architectures
- •Richardson, L. & Ruby, S. (2007). RESTful Web Services