2025
请求返回一部分内容后中断,但服务器本身没有主动断开连接
git config pull.rebase false
20250514
UUID vs 雪花ID Base62 编码:唯一标识符在系统设计中的全面对比与选型指南
OpenAPI 到 FastAPI 服务端代码生成项目
ollama Segmentation fault
本文档使用 MrDoc 发布
-
+
首页
OpenAPI 到 FastAPI 服务端代码生成项目
## 项目概述 本项目旨在从 OpenAPI 3.0 规范文件 (`SponsoredProducts_prod_3p.json`) 自动生成对应的 FastAPI 服务端代码。该 OpenAPI 文件定义了 Amazon Advertising API 中关于 Sponsored Products 的各种接口,包括竞价推荐、关键词推荐、产品定位等功能。 ## 需求分析 ### 1. 输入文件分析 - **文件名**: `SponsoredProducts_prod_3p.json` - **类型**: OpenAPI 3.0 规范文件 (JSON 格式) - **大小**: 837KB - **主要功能模块**: - 竞价推荐 (Bid Recommendations) - 关键词推荐 (Keyword Recommendations) - 产品定位 (Product Targeting) - 广告组管理 (Ad Groups) - 负向关键词 (Negative Keywords) - 预算规则 (Budget Rules) - 优化规则 (Optimization Rules) ### 2. 目标输出 生成一个完整的 FastAPI 应用,包括: - **模型定义**: 基于 Pydantic 的数据模型 - **路由文件**: FastAPI 路由和端点定义 - **主应用文件**: FastAPI 应用实例和配置 - **依赖管理**: requirements.txt 文件 - **文档**: 自动生成的 API 文档 ### 3. 技术要求 - Python 3.12+ (建议使用最新稳定版) - FastAPI 最新版本 (≥ 0.104.0) - Pydantic v2 数据验证 (≥ 2.5.0) - Uvicorn ASGI 服务器 (≥ 0.24.0) - 自动生成交互式 API 文档 (Swagger UI / ReDoc) ## 可选工具对比 ### 1. fastapi-code-generator (推荐) - **项目地址**: https://github.com/koxudaxi/fastapi-code-generator - **优点**: - 专门为 FastAPI 设计 - 支持模块化路由生成 - 支持自定义模板 - 支持 Pydantic 2.0 - 活跃维护,文档完善 ### 2. OpenAPI Generator (python-fastapi) - **项目地址**: https://openapi-generator.tech/ - **优点**: - 支持多种语言和框架 - 功能全面 - 大型开源项目 - **缺点**: - 配置复杂 - 生成的代码可能需要较多调整 ### 3. openapi-to-fastapi - **项目地址**: https://github.com/ioxiocom/openapi-to-fastapi - **优点**: - 支持动态路由生成 - 支持自定义业务逻辑 - **缺点**: - 功能相对有限 - 实验性质,稳定性待验证 ## 执行步骤 ### 步骤 1: 环境准备 #### 1.1 创建 Python 虚拟环境 ```bash # 创建虚拟环境 python -m venv fastapi_env # 激活虚拟环境 (Windows) fastapi_env\Scripts\activate # 激活虚拟环境 (macOS/Linux) source fastapi_env/bin/activate ``` #### 1.2 安装必需工具 ```bash # 升级 pip 到最新版本 pip install --upgrade pip # 安装 fastapi-code-generator 最新版本 (推荐方案) pip install --upgrade fastapi-code-generator # 或者安装 OpenAPI Generator 最新版本 (备选方案) # npm install -g @openapitools/openapi-generator-cli@latest ``` ### 步骤 2: 代码生成 #### 2.1 使用 fastapi-code-generator (推荐) ```bash # 基础生成命令 fastapi-codegen \ --input SponsoredProducts_prod_3p.json \ --output ./fastapi_app # 生成模块化路由 (适合大型应用) fastapi-codegen \ --input SponsoredProducts_prod_3p.json \ --output ./fastapi_app \ --generate-routers # 使用 Pydantic v2 (推荐,支持最新特性) fastapi-codegen \ --input SponsoredProducts_prod_3p.json \ --output ./fastapi_app \ --output-model-type pydantic_v2.BaseModel # 指定 Python 版本为 3.12 fastapi-codegen \ --input SponsoredProducts_prod_3p.json \ --output ./fastapi_app \ --python-version 3.12 # 完整推荐命令 (模块化 + Pydantic v2 + Python 3.12) fastapi-codegen \ --input SponsoredProducts_prod_3p.json \ --output ./fastapi_app \ --generate-routers \ --output-model-type pydantic_v2.BaseModel \ --python-version 3.12 ``` #### 2.2 使用 OpenAPI Generator (备选方案) ```bash # 安装 OpenAPI Generator npm install -g @openapitools/openapi-generator-cli # 生成 FastAPI 代码 openapi-generator generate \ -i SponsoredProducts_prod_3p.json \ -g python-fastapi \ -o ./fastapi_app \ --additional-properties packageName=amazon_ads_api ``` ### 步骤 3: 项目结构调整 生成后的项目结构应该类似于: ``` fastapi_app/ ├── main.py # FastAPI 应用主文件 ├── models.py # Pydantic 数据模型 ├── routers/ # 路由模块 (如果使用 --generate-routers) │ ├── bid_recommendations.py │ ├── keyword_recommendations.py │ ├── product_targeting.py │ └── ... ├── dependencies.py # 依赖注入 └── requirements.txt # Python 依赖 ``` ### 步骤 4: 安装依赖并启动应用 #### 4.1 创建现代化的 requirements.txt (可选) 如果生成的 requirements.txt 版本较旧,可以创建一个新的: ```txt # requirements.txt - 使用最新稳定版本 # 核心框架 (Python 3.12+ 兼容) fastapi[all]>=0.104.0 uvicorn[standard]>=0.24.0 pydantic>=2.5.0 pydantic-settings>=2.1.0 # 服务器和部署 gunicorn>=21.2.0 hypercorn>=0.15.0 # 数据库相关 sqlalchemy>=2.0.23 alembic>=1.13.0 asyncpg>=0.29.0 # PostgreSQL async driver aiosqlite>=0.19.0 # SQLite async driver # 认证和安全 python-jose[cryptography]>=3.3.0 passlib[bcrypt]>=1.7.4 python-multipart>=0.0.6 # HTTP 客户端 httpx>=0.25.0 aiohttp>=3.9.0 # 工具和开发 python-dotenv>=1.0.0 loguru>=0.7.0 # 现代化日志库 rich>=13.7.0 # 美化输出 typer>=0.9.0 # 现代 CLI 框架 ``` #### 4.2 安装项目依赖 ```bash cd fastapi_app # 升级 pip 到最新版本 pip install --upgrade pip # 安装项目依赖 pip install -r requirements.txt # 如果没有 requirements.txt,手动安装最新版核心依赖 pip install --upgrade "fastapi[all]>=0.104.0" "uvicorn[standard]>=0.24.0" "pydantic>=2.5.0" # 可选:安装额外的生产环境依赖 pip install --upgrade gunicorn python-multipart python-jose[cryptography] passlib[bcrypt] ``` #### 4.3 启动开发服务器 ```bash # 使用 uvicorn 启动 uvicorn main:app --reload --host 0.0.0.0 --port 8000 # 或者在 main.py 中添加启动代码 # if __name__ == "__main__": # import uvicorn # uvicorn.run(app, host="0.0.0.0", port=8000, reload=True) ``` ### 步骤 5: 验证和测试 #### 5.1 访问 API 文档 - Swagger UI: http://localhost:8000/docs - ReDoc: http://localhost:8000/redoc - OpenAPI JSON: http://localhost:8000/openapi.json #### 5.2 测试 API 端点 ```bash # 使用 curl 测试 curl -X GET "http://localhost:8000/" \ -H "accept: application/json" # 测试具体的 API 端点 (示例) curl -X POST "http://localhost:8000/sp/targets/bid/recommendations" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -H "Amazon-Advertising-API-ClientId: your-client-id" \ -H "Amazon-Advertising-API-Scope: your-scope" \ -d '{ "recommendationType": "BIDS_FOR_EXISTING_AD_GROUP", "adGroupId": "123456" }' ``` ### 步骤 6: 代码完善和自定义 #### 6.1 实现业务逻辑 生成的代码只包含基础框架,需要: - 在各个端点函数中实现具体的业务逻辑 - 添加数据库连接和操作 - 实现认证和授权机制 - 添加错误处理和日志记录 #### 6.2 添加中间件和配置 ```python # 在 main.py 中添加 from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.gzip import GZipMiddleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.add_middleware(GZipMiddleware, minimum_size=1000) ``` #### 6.3 环境配置 ```python # config.py from pydantic_settings import BaseSettings # Pydantic v2 更新 from pydantic import Field class Settings(BaseSettings): amazon_client_id: str = Field(..., description="Amazon API Client ID") amazon_client_secret: str = Field(..., description="Amazon API Client Secret") database_url: str = Field("sqlite:///./amazon_ads.db", description="Database URL") log_level: str = Field("INFO", description="Logging level") api_prefix: str = Field("/api/v1", description="API prefix") # Pydantic v2 配置方式 model_config = { "env_file": ".env", "env_file_encoding": "utf-8", "case_sensitive": False } settings = Settings() ``` ### 步骤 7: 部署准备 #### 7.1 创建 Dockerfile ```dockerfile FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] ``` #### 7.2 创建 docker-compose.yml ```yaml version: '3.8' services: api: build: . ports: - "8000:8000" environment: - DATABASE_URL=postgresql://user:password@db:5432/amazon_ads depends_on: db: condition: service_healthy db: image: postgres:16-alpine # 使用最新 PostgreSQL 版本 healthcheck: test: ["CMD-SHELL", "pg_isready -U user -d amazon_ads"] interval: 10s timeout: 5s retries: 5 environment: POSTGRES_DB: amazon_ads POSTGRES_USER: user POSTGRES_PASSWORD: password volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data: ``` ## 版本管理和更新 ### 1. 检查 Python 版本兼容性 ```bash # 确认 Python 版本 python --version # 应该显示 3.12.x 或更高 # 检查已安装包的版本 pip list | grep -E "(fastapi|pydantic|uvicorn)" # 查看过时的包 pip list --outdated # 批量更新所有包到最新版本 (谨慎使用) pip install --upgrade $(pip list --outdated --format=freeze | cut -d'=' -f1) ``` ### 2. 依赖版本固定策略 ```txt # 推荐的版本固定策略 (requirements.txt) fastapi[all]==0.104.1 # 固定主版本号,确保稳定性 uvicorn[standard]>=0.24.0,<1.0.0 # 允许次版本更新 pydantic>=2.5.0,<3.0.0 # 允许在大版本内更新 ``` ### 3. 开发环境 requirements ```txt # requirements-dev.txt - 开发依赖 -r requirements.txt # 测试 pytest>=7.4.0 pytest-asyncio>=0.21.0 pytest-cov>=4.1.0 httpx>=0.25.0 # 用于测试 HTTP 客户端 # 代码质量 black>=23.0.0 isort>=5.12.0 flake8>=6.0.0 mypy>=1.7.0 # 文档 mkdocs>=1.5.0 mkdocs-material>=9.4.0 ``` ## 注意事项 ### 1. 安全考虑 - 生成的代码中的认证头信息需要实际实现 - 敏感信息应通过环境变量管理 - 添加 API 限流和访问控制 ### 2. 性能优化 - 对于大型 OpenAPI 文件,考虑按模块拆分生成 - 使用异步处理提高并发性能 - 添加缓存机制 ### 3. 维护和更新 - 当 OpenAPI 规范更新时,需要重新生成代码 - 保持自定义业务逻辑与生成代码的分离 - 建立版本控制和 CI/CD 流程 ## 预期结果 完成上述步骤后,您将获得: ### 🚀 现代化的 FastAPI 应用 1. **完整的应用框架** - 基于 Python 3.12+ 和最新版本依赖 2. **Pydantic v2 数据模型** - 更强大的类型验证和序列化 3. **模块化路由结构** - 便于大型应用的维护和扩展 4. **自动生成的 API 文档** - Swagger UI 和 ReDoc 支持 5. **生产就绪的配置** - Docker 容器化和环境配置 ### 📊 Amazon Advertising API 集成 1. **完整的端点覆盖** - 包含所有 Sponsored Products API 2. **强类型验证** - 基于 OpenAPI 规范的请求/响应模型 3. **认证框架** - Amazon API 认证头的处理结构 4. **错误处理** - 标准化的 API 错误响应 ### 🔧 开发体验优化 1. **现代化依赖管理** - 使用最新稳定版本的包 2. **异步支持** - 充分利用 FastAPI 的异步特性 3. **类型安全** - 完整的 Python 类型注解 4. **开发工具集成** - 支持现代 IDE 的代码补全和检查 ### 🚀 性能和扩展性 1. **高性能** - 基于 Starlette 和 Pydantic 的高性能架构 2. **可扩展** - 模块化设计支持功能扩展 3. **云原生** - Docker 容器化部署支持 4. **监控就绪** - 日志和健康检查配置 这将为您提供一个现代化、高性能、易维护的 Amazon Advertising API 集成起始点,大大加速开发进程。
幻翼
2025年5月27日 11:28
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码