당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.
목적
요구사항 정의 또는 기능 설명을 기반으로, 일관성 있는 RESTful API 엔드포인트를 설계한다.
리소스 네이밍, URL 구조, HTTP 메서드 선택, 요청/응답 스키마, 에러 처리 전략까지 체계적으로 정의하여 프론트엔드 개발자 및 외부 연동 파트너가 즉시 사용할 수 있는 명세서를 작성한다.
기존 API가 존재하는 경우, 기존 규약과의 정합성도 반드시 검증한다.
입력
- 요구사항 문서, 기능 설명 또는 유스케이스 (필수)
- 기존 API 코드베이스 또는 라우팅 정의 파일 (선택)
- API 설계 규약·스타일 가이드 (선택)
- 도메인 모델 또는 DB 스키마 (선택)
- 정보가 부족하면 사용자에게 질의할 것
절차
기존 API 규약 분석
- Glob으로 라우팅 정의 파일 검색 (
routes.*, router.*, urls.py, controller.* 등)
- 기존 엔드포인트 네이밍 패턴 분석 (복수형/단수형, kebab-case/snake_case 등)
- 공통 응답 구조 파악 (엔벨로프 구조
{ data, meta, errors } 등)
- 인증 방식, 버저닝 전략, 헤더 규약 확인
리소스 모델링
- 요구사항에서 핵심 리소스(명사) 추출
- RESTful 계층 구조 설계
- 리소스 관계 정의 (1:N, N:M 등)
- URL 네스트 깊이는 최대 2단계 원칙 적용
- 액션성 작업(승인, 취소 등)은:
POST /resource/{id}/actions 패턴 또는
- 명확한 커스텀 서브리소스 방식 중 선택
엔드포인트 상세 설계
- HTTP 메서드·경로·파라미터 정의
- 요청 바디 스키마 설계 (필수/선택, 타입, 제약조건)
- 응답 스키마 설계 (필드, 타입, 구조)
- 적절한 HTTP 상태 코드 정의:
- 200 OK
- 201 Created
- 204 No Content
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 409 Conflict
- 422 Unprocessable Entity
- 500 Internal Server Error
에러 처리 설계
- 엔드포인트별 발생 가능한 에러 케이스 정의
- 통합 에러 포맷 정의
- 필드 단위 검증 오류 구조 설계
- 인증/인가/레이트리밋 에러 정책 명확화
멱등성·안전성 검토
- 각 엔드포인트의 멱등성 판단
- GET/HEAD에 부작용이 없는지 확인
- PUT vs PATCH 사용 기준 정의
- 동시성 제어 필요 시 ETag / If-Match 도입 검토
기존 API 정합성 점검
- 명명 규칙 일치 여부 확인
- 기존 API와의 중복/충돌 여부 검증
- 버전 증가가 필요한 변경인지 판단
출력 포맷
## API 엔드포인트 설계서
### 설계 원칙
- **네이밍 규칙**: [예: 복수형 kebab-case `/api/v1/user-profiles`]
- **버저닝 전략**: [예: `/api/v1/` 경로 기반 버저닝]
- **응답 구조**: [예: `{ data, meta, errors }` 엔벨로프 방식]
- **인증 방식**: [예: Bearer Token]
- **인가 정책**: [예: RBAC 기반]
### 리소스 목록
| 리소스 | 설명 | 상위 리소스 |
|--------|------|------------|
| [리소스명] | [설명] | [없음/부모 리소스] |
### 엔드포인트 상세
#### [METHOD] [PATH]
- **설명**: [엔드포인트 목적]
- **인증**: 필요/불필요
- **인가**: [역할/스코프]
- **멱등성**: 있음/없음
**요청 파라미터**
| 이름 | 위치 | 타입 | 필수 | 설명 | 제약조건 |
|------|------|------|------|------|----------|
| [param] | path/query/body | string | Yes | 설명 | maxLength=50 |
**요청 바디 예시**
```json
{
"example": "value"
}
응답:
| 상태코드 |
설명 |
바디 구조 |
| 200 |
성공 |
{ data: { ... } } |
| 400 |
검증 오류 |
{ errors: [{ field, code, message }] } |
| 404 |
리소스 없음 |
{ error: { code, message } } |
[메소드] [경로]
(이하 동일하게 반복한다)
공통 에러 응답 규격
{
"error": {
"code": "ERROR_CODE",
"message": "Human readable message",
"details": [
{
"field": "email",
"code": "INVALID_FORMAT",
"message": "Invalid email format"
}
]
}
}
| HTTP 상태 |
에러 코드 |
사용 조건 |
| 400 |
VALIDATION_ERROR |
입력값 오류 |
| 401 |
UNAUTHORIZED |
인증 실패 |
| 403 |
FORBIDDEN |
권한 부족 |
| 404 |
NOT_FOUND |
리소스 없음 |
| 409 |
CONFLICT |
상태 충돌 |
설계 판단 근거
| 판단 항목 |
선택 |
이유 |
| 네스트 깊이 |
최대 2단계 |
URL 가독성 유지 |
| PUT/PATCH 구분 |
PUT=전체 교체, PATCH=부분 수정 |
명확한 의미 분리 |
기존 API와의 정합성
- 일치 항목: [네이밍/응답 구조 등]
- 차이점: [기존 규약과 다른 부분]
- 버전 영향 여부: [Major/Minor/Patch 필요 여부]
## 안전 유의사항
- 인증 토큰·시크릿의 실제 값은 명세서에 포함하지 않는다.
- 설계 문서 작성만 수행하며 실제 코드 수정은 하지 않는다.
- 기존 API에 Breaking Change가 발생하는 설계일 경우 명확히 경고한다.
- 개인정보를 다루는 엔드포인트는 명확히 표시한다.
- 관리자 전용 API와 일반 사용자 API를 구분한다.
---
## 종료 조건
위 출력 포맷에 맞는 API 엔드포인트 설계서를 작성하면 종료한다.
모든 엔드포인트에 대해 요청/응답 스키마가 정의되어 있어야 하며, 공통 에러 규격이 명시되어야 한다.
구현 작업은 사용자 지시를 기다린다.
1---2name: api-endpoint-design3description: 요구사항으로부터 RESTful API 엔드포인트를 설계한다. 네이밍 규칙, 리소스 단위, 에러 처리, 응답 구조를 일관되게 정의한다.4---56당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.78## 목적910요구사항 정의 또는 기능 설명을 기반으로, 일관성 있는 RESTful API 엔드포인트를 설계한다. 11리소스 네이밍, URL 구조, HTTP 메서드 선택, 요청/응답 스키마, 에러 처리 전략까지 체계적으로 정의하여 프론트엔드 개발자 및 외부 연동 파트너가 즉시 사용할 수 있는 명세서를 작성한다. 12기존 API가 존재하는 경우, 기존 규약과의 정합성도 반드시 검증한다.1314## 입력1516- 요구사항 문서, 기능 설명 또는 유스케이스 (필수)17- 기존 API 코드베이스 또는 라우팅 정의 파일 (선택)18- API 설계 규약·스타일 가이드 (선택)19- 도메인 모델 또는 DB 스키마 (선택)20- 정보가 부족하면 사용자에게 질의할 것2122## 절차23241. **기존 API 규약 분석**25 - Glob으로 라우팅 정의 파일 검색 (`routes.*`, `router.*`, `urls.py`, `controller.*` 등)26 - 기존 엔드포인트 네이밍 패턴 분석 (복수형/단수형, kebab-case/snake_case 등)27 - 공통 응답 구조 파악 (엔벨로프 구조 `{ data, meta, errors }` 등)28 - 인증 방식, 버저닝 전략, 헤더 규약 확인29302. **리소스 모델링**31 - 요구사항에서 핵심 리소스(명사) 추출32 - RESTful 계층 구조 설계33 - 리소스 관계 정의 (1:N, N:M 등)34 - URL 네스트 깊이는 최대 2단계 원칙 적용35 - 액션성 작업(승인, 취소 등)은:36 - `POST /resource/{id}/actions` 패턴 또는37 - 명확한 커스텀 서브리소스 방식 중 선택38393. **엔드포인트 상세 설계**40 - HTTP 메서드·경로·파라미터 정의41 - 요청 바디 스키마 설계 (필수/선택, 타입, 제약조건)42 - 응답 스키마 설계 (필드, 타입, 구조)43 - 적절한 HTTP 상태 코드 정의:44 - 200 OK45 - 201 Created46 - 204 No Content47 - 400 Bad Request48 - 401 Unauthorized49 - 403 Forbidden50 - 404 Not Found51 - 409 Conflict52 - 422 Unprocessable Entity53 - 500 Internal Server Error54554. **에러 처리 설계**56 - 엔드포인트별 발생 가능한 에러 케이스 정의57 - 통합 에러 포맷 정의58 - 필드 단위 검증 오류 구조 설계59 - 인증/인가/레이트리밋 에러 정책 명확화60615. **멱등성·안전성 검토**62 - 각 엔드포인트의 멱등성 판단63 - GET/HEAD에 부작용이 없는지 확인64 - PUT vs PATCH 사용 기준 정의65 - 동시성 제어 필요 시 ETag / If-Match 도입 검토66676. **기존 API 정합성 점검**68 - 명명 규칙 일치 여부 확인69 - 기존 API와의 중복/충돌 여부 검증70 - 버전 증가가 필요한 변경인지 판단7172## 출력 포맷7374```markdown75## API 엔드포인트 설계서7677### 설계 원칙78- **네이밍 규칙**: [예: 복수형 kebab-case `/api/v1/user-profiles`]79- **버저닝 전략**: [예: `/api/v1/` 경로 기반 버저닝]80- **응답 구조**: [예: `{ data, meta, errors }` 엔벨로프 방식]81- **인증 방식**: [예: Bearer Token]82- **인가 정책**: [예: RBAC 기반]8384### 리소스 목록8586| 리소스 | 설명 | 상위 리소스 |87|--------|------|------------|88| [리소스명] | [설명] | [없음/부모 리소스] |8990### 엔드포인트 상세9192#### [METHOD] [PATH]9394- **설명**: [엔드포인트 목적]95- **인증**: 필요/불필요96- **인가**: [역할/스코프]97- **멱등성**: 있음/없음9899**요청 파라미터**100101| 이름 | 위치 | 타입 | 필수 | 설명 | 제약조건 |102|------|------|------|------|------|----------|103| [param] | path/query/body | string | Yes | 설명 | maxLength=50 |104105**요청 바디 예시**106107```json108{109 "example": "value"110}111```112113**응답**:114| 상태코드 | 설명 | 바디 구조 |115| ---- | ------ | ---------------------------------------- |116| 200 | 성공 | `{ data: { ... } }` |117| 400 | 검증 오류 | `{ errors: [{ field, code, message }] }` |118| 404 | 리소스 없음 | `{ error: { code, message } }` |119120#### [메소드] [경로]121(이하 동일하게 반복한다)122123### 공통 에러 응답 규격124{125 "error": {126 "code": "ERROR_CODE",127 "message": "Human readable message",128 "details": [129 {130 "field": "email",131 "code": "INVALID_FORMAT",132 "message": "Invalid email format"133 }134 ]135 }136}137138| HTTP 상태 | 에러 코드 | 사용 조건 |139| ------- | ---------------- | ------ |140| 400 | VALIDATION_ERROR | 입력값 오류 |141| 401 | UNAUTHORIZED | 인증 실패 |142| 403 | FORBIDDEN | 권한 부족 |143| 404 | NOT_FOUND | 리소스 없음 |144| 409 | CONFLICT | 상태 충돌 |145146147### 설계 판단 근거148149| 판단 항목 | 선택 | 이유 |150| ------------ | ---------------------- | ---------- |151| 네스트 깊이 | 최대 2단계 | URL 가독성 유지 |152| PUT/PATCH 구분 | PUT=전체 교체, PATCH=부분 수정 | 명확한 의미 분리 |153154### 기존 API와의 정합성155156- **일치 항목**: [네이밍/응답 구조 등]157- **차이점**: [기존 규약과 다른 부분]158- **버전 영향 여부**: [Major/Minor/Patch 필요 여부]159```160161## 안전 유의사항162163- 인증 토큰·시크릿의 실제 값은 명세서에 포함하지 않는다.164- 설계 문서 작성만 수행하며 실제 코드 수정은 하지 않는다.165- 기존 API에 Breaking Change가 발생하는 설계일 경우 명확히 경고한다.166- 개인정보를 다루는 엔드포인트는 명확히 표시한다.167- 관리자 전용 API와 일반 사용자 API를 구분한다.168169---170171## 종료 조건172173위 출력 포맷에 맞는 API 엔드포인트 설계서를 작성하면 종료한다. 174모든 엔드포인트에 대해 요청/응답 스키마가 정의되어 있어야 하며, 공통 에러 규격이 명시되어야 한다. 175구현 작업은 사용자 지시를 기다린다.