# API设计和集成

## 版本信息
| 版本 | 日期 | 描述 | 作者 |
|------|------|------|------|
| 3.0 | 2025-10-15 | 更新为出行服务项目API设计 | Winston |

## API集成策略
- **API集成策略**: 保持现有RESTful API设计，增强OpenAPI文档
- **认证**: JWT Bearer Token，保持现有认证机制
- **版本控制**: 使用v1前缀 (`/api/v1/`)，保持向后兼容

### OpenAPI规范
```yaml
openapi: 3.0.0
info:
  title: 出行服务API
  version: 1.0.0
  description: 出行服务项目RESTful API文档 - 基于MVP需求
servers:
  - url: http://localhost:8080/api/v1
    description: 本地开发环境
  - url: https://api.example.com/api/v1
    description: 生产环境

components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
        username:
          type: string
        email:
          type: string
          nullable: true
        roles:
          type: array
          items:
            $ref: '#/components/schemas/Role'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Role:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        permissions:
          type: array
          items:
            type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    PaginatedUsers:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/User'
        pagination:
          $ref: '#/components/schemas/Pagination'
    Pagination:
      type: object
      properties:
        total:
          type: integer
        current:
          type: integer
        pageSize:
          type: integer
        totalPages:
          type: integer

security:
  - BearerAuth: []
```

## API端点示例
**用户管理端点**:
- **方法**: GET
- **端点**: `/api/v1/users`
- **用途**: 获取用户分页列表
- **集成**: 使用通用CRUD服务，支持搜索和过滤

**请求示例**:
```json
{
  "page": 1,
  "pageSize": 10,
  "keyword": "搜索词",
  "sortBy": "createdAt",
  "sortOrder": "DESC"
}
```

**响应示例**:
```json
{
  "data": [
    {
      "id": 1,
      "email": "user@example.com",
      "roles": [{"id": 1, "name": "admin"}]
    }
  ],
  "pagination": {
    "total": 100,
    "current": 1,
    "pageSize": 10
  }
}
```

**文件管理端点**:
- **方法**: POST
- **端点**: `/api/v1/files/upload-policy`
- **用途**: 生成文件上传策略和预签名URL
- **集成**: 使用MinIO服务，支持分段上传和大文件处理

**请求示例**:
```json
{
  "name": "example.pdf",
  "type": "application/pdf",
  "size": 1048576,
  "description": "示例文件"
}
```

**响应示例**:
```json
{
  "file": {
    "id": 123,
    "name": "example.pdf",
    "path": "user-1/uuid-example.pdf",
    "size": 1048576,
    "type": "application/pdf",
    "uploadUserId": 1,
    "uploadTime": "2025-09-19T10:30:00.000Z"
  },
  "uploadPolicy": {
    "x-amz-algorithm": "AWS4-HMAC-SHA256",
    "x-amz-credential": "minioadmin/20250919/us-east-1/s3/aws4_request",
    "x-amz-date": "20250919T103000Z",
    "policy": "base64-encoded-policy",
    "x-amz-signature": "signature",
    "host": "https://minio.example.com",
    "key": "user-1/uuid-example.pdf",
    "bucket": "d8dai"
  }
}
```

## 相关文档

- [通用 CRUD 规范](./generic-crud-standards.md)
- [非通用 CRUD 路由规范](./non-generic-crud-standards.md)
- [数据模型规范](./data-model-schema-changes.md)
- [测试策略](./testing-strategy.md)
