1️⃣ 클라이언트-서버 구조 🖥️ ↔️ 📱
2️⃣ 무상태성 (Stateless) ❌💾
3️⃣ 캐시 가능성 (Cacheable) 💾⚡
4️⃣ 계층화 시스템 (Layered System) 🏗️
5️⃣ 균일한 인터페이스 (Uniform Interface) 🌎
6️⃣ 코드 온 디맨드 (Code on Demand) (선택 사항) 💻
✔️ 리소스 중심 설계: 모든 것을 리소스로 표현
✔️ URI를 통한 리소스 식별: /users
, /orders
등
✔️ HTTP 메서드 활용: GET, POST, PUT, DELETE
✔️ HATEOAS 지원: 응답에 다음 액션 관련 링크 포함
✔️ 자체 설명적 메시지: JSON, XML 같은 표준 형식 사용
✔️ 무상태 (Stateless) 원칙 준수
HTTP 메서드 | CRUD 연산 | 설명 |
---|---|---|
🔍 GET | Read | 리소스 조회 |
✏️ POST | Create | 리소스 생성 |
🔄 PUT | Update/Replace | 리소스 전체 교체 |
✂️ PATCH | Update/Modify | 리소스 부분 수정 |
❌ DELETE | Delete | 리소스 삭제 |
🏷️ HEAD | - | GET과 유사, 본문 없이 헤더만 반환 |
🛠️ OPTIONS | - | 지원하는 메서드 조회 |
🟦 1xx (정보) – 요청을 수신했으나 처리 중
🟩 2xx (성공) – 요청 성공
🟨 3xx (리다이렉션) – 추가 작업 필요
🟥 4xx (클라이언트 오류) – 잘못된 요청
🟧 5xx (서버 오류) – 서버 문제 발생
코드 | 의미 |
---|---|
✅ 200 OK | 요청 성공 |
🆕 201 Created | 리소스 생성 성공 |
🚫 204 No Content | 응답 본문 없음 |
❌ 400 Bad Request | 잘못된 요청 |
🔑 401 Unauthorized | 인증 필요 |
🚷 403 Forbidden | 권한 없음 |
🔍 404 Not Found | 리소스를 찾을 수 없음 |
🚫 405 Method Not Allowed | 허용되지 않은 메서드 |
⚠️ 409 Conflict | 리소스 충돌 |
💥 500 Internal Server Error | 서버 오류 |
✔️ 명사 사용: /users
(O), /getUsers
(X)
✔️ 계층 구조 표현: /users/123/posts
✔️ 소문자 사용: /users
(O), /Users
(X)
✔️ 하이픈(-) 사용: /user-profiles
(O), /user_profiles
(X)
✔️ 마지막 슬래시(/) 없음: /users
(O), /users/
(X)
✔️ 행위 포함 금지: /users
(GET) (O), /users/get
(X)
GET /users # 사용자 목록 조회
GET /users/{id} # 특정 사용자 조회
POST /users # 새 사용자 생성
PUT /users/{id} # 사용자 정보 수정
DELETE /users/{id} # 사용자 삭제
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "홍길동",
"email": "hong@example.com",
"age": 30
}