Spaces:
Sleeping
Sleeping
系统模式 (systemPatterns.md)
系统架构
本项目采用简单的客户端-代理-目标 API 的三层架构。
graph LR
Client[客户端 (e.g., Postman, curl)] --> Proxy[FastAPI 代理 (SuperProxy)]
Proxy --> TargetAPI[目标 API (e.g., Google Gemini API)]
关键技术决策
- FastAPI:选择 FastAPI 作为 Web 框架,因为它提供了高性能、易于使用的异步 API 开发能力,非常适合构建轻量级代理服务。
- httpx:选择
httpx作为 HTTP 客户端库,因为它支持异步请求,与 FastAPI 的异步特性完美结合,避免了阻塞。 - 环境变量配置:使用
python-dotenv管理敏感信息(如 API 密钥)和可配置参数(如目标 API 基 URL),增强了安全性和灵活性。 - 通用路由:采用
/{path:path}通用路由来捕获所有传入请求,实现灵活的转发,无需为每个目标 API 端点单独定义路由。
设计模式
- **代理模式 (Proxy Pattern)**:本项目是代理模式的经典应用,FastAPI 应用程序充当客户端和目标 API 之间的代理,控制对目标 API 的访问并进行请求/响应转换。
- **配置即代码 (Configuration as Code)**:通过
.env文件管理配置,使得部署和环境切换更加便捷和可控。
组件关系
- **FastAPI 应用 (
app.py)**:核心组件,负责路由、请求解析、请求转发和响应处理。 - httpx 客户端:在 FastAPI 应用内部使用,负责向目标 API 发送实际的 HTTP 请求。
- python-dotenv:在应用启动时加载
.env文件中的环境变量,供 FastAPI 应用使用。 - 客户端:可以是任何 HTTP 客户端(浏览器、Postman、
curl、自定义应用),向 FastAPI 代理发送请求。 - 目标 API:本项目中特指 Google Gemini API(OpenAI 兼容接口),是代理请求的最终目的地。
关键实现路径
- 请求接收:FastAPI 的
@app.api_route("/{path:path}")装饰器捕获所有传入请求。 - 请求解析:
Request对象用于获取请求方法、头部、查询参数和请求体。 - 头部处理:移除
Host头,添加Authorization: Bearer头,并强制设置User-Agent。 - URL 构建:根据
GEMINI_BASE_URL和传入的path构建目标 API 的完整 URL。 - 请求转发:使用
httpx.AsyncClient().request()异步发送请求到目标 API。 - 响应处理:将目标 API 的
content、status_code和headers封装成FastAPI.Response返回给客户端。 - 错误处理:捕获
httpx.RequestError和httpx.HTTPStatusError,并转换为HTTPException返回给客户端。