docs: API 라우터 분리 및 버전 폴백 시스템 문서화
- api-rules.md: 라우팅 섹션 전면 개편 - 도메인별 라우트 파일 구조 (13개) - ApiVersionMiddleware 설명 - API 버전 폴백 시스템 상세 설명 - system-overview.md: 라우팅 구조 섹션 확장 - 도메인별 분리 구조 다이어그램 - 미들웨어 스택에 ApiVersionMiddleware 추가 - dev-commands.md: 라우트 관리 명령어 추가 - INDEX.md: 2026-01-28 변경 이력 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# SAM 시스템 아키텍처
|
||||
|
||||
**업데이트**: 2025-12-26
|
||||
**업데이트**: 2026-01-28
|
||||
|
||||
---
|
||||
|
||||
@@ -212,26 +212,70 @@ menu:{menu_id}.{permission_type}
|
||||
|
||||
**실행 순서:**
|
||||
1. `ApiRateLimiter` - Rate Limiting
|
||||
2. `ApiKeyMiddleware` - API Key 검증
|
||||
3. `CheckSwaggerAuth` - Swagger 인증 체크
|
||||
4. `CorsMiddleware` - CORS 처리
|
||||
5. `CheckPermission` - 권한 검증
|
||||
6. `PermMapper` - 권한 매핑
|
||||
2. `ApiVersionMiddleware` - API 버전 선택 및 폴백 처리
|
||||
3. `ApiKeyMiddleware` - API Key 검증
|
||||
4. `CheckSwaggerAuth` - Swagger 인증 체크
|
||||
5. `CorsMiddleware` - CORS 처리
|
||||
6. `CheckPermission` - 권한 검증
|
||||
7. `PermMapper` - 권한 매핑
|
||||
|
||||
## 라우팅 구조
|
||||
|
||||
**기본 경로 그룹:**
|
||||
```php
|
||||
Route::prefix('v1')->middleware(['auth.apikey'])->group(function () {
|
||||
// 공개 라우트
|
||||
Route::post('/login', [AuthController::class, 'login']);
|
||||
### 도메인별 라우트 분리
|
||||
|
||||
// 보호된 라우트
|
||||
Route::middleware(['auth:sanctum'])->group(function () {
|
||||
Route::get('/users', [UserController::class, 'index']);
|
||||
// ...
|
||||
});
|
||||
API 라우트는 도메인별로 분리되어 관리됩니다:
|
||||
|
||||
```
|
||||
routes/api/
|
||||
├── v1/ # v1 API 라우트 (13개 도메인)
|
||||
│ ├── auth.php # 인증 (login, logout, signup)
|
||||
│ ├── admin.php # 관리자 기능
|
||||
│ ├── users.php # 사용자 관리
|
||||
│ ├── tenants.php # 테넌트 관리
|
||||
│ ├── hr.php # HR/인사 관리
|
||||
│ ├── finance.php # 재무/회계
|
||||
│ ├── sales.php # 영업/판매
|
||||
│ ├── inventory.php # 재고/품목
|
||||
│ ├── production.php # 생산 관리
|
||||
│ ├── design.php # 설계/모델
|
||||
│ ├── files.php # 파일 관리
|
||||
│ ├── boards.php # 게시판
|
||||
│ └── common.php # 공통 기능
|
||||
├── v2/ # v2 API (필요시 생성)
|
||||
└── api.php # 라우트 로더
|
||||
```
|
||||
|
||||
### API 버전 관리
|
||||
|
||||
**ApiVersionMiddleware**가 버전 선택 및 폴백을 처리합니다:
|
||||
|
||||
**버전 지정 방법:**
|
||||
- `Accept-Version` 헤더 (권장)
|
||||
- `X-API-Version` 헤더
|
||||
- `api_version` 쿼리 파라미터
|
||||
- 미지정 시 기본값: `v1`
|
||||
|
||||
**폴백 동작:**
|
||||
- v2 요청 시 해당 라우트가 v2에 없으면 v1으로 자동 폴백
|
||||
- 응답 헤더 `X-API-Version`에 실제 사용 버전 표시
|
||||
|
||||
### 기본 경로 그룹
|
||||
|
||||
```php
|
||||
// routes/api.php - 라우트 로더
|
||||
Route::prefix('v1')->middleware(['auth.apikey'])->group(function () {
|
||||
require __DIR__.'/api/v1/auth.php';
|
||||
require __DIR__.'/api/v1/admin.php';
|
||||
require __DIR__.'/api/v1/users.php';
|
||||
// ... 13개 도메인 파일 로드
|
||||
});
|
||||
|
||||
// v2 라우트 (존재하는 경우)
|
||||
if (is_dir(__DIR__.'/api/v2')) {
|
||||
Route::prefix('v2')->middleware(['auth.apikey'])->group(function () {
|
||||
// v2 전용 라우트
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 공유 모델 구조
|
||||
|
||||
Reference in New Issue
Block a user