Spaces:
Sleeping
Sleeping
File size: 2,747 Bytes
6a5b28d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# 系统模式 (systemPatterns.md)
## 系统架构
本项目采用简单的客户端-代理-目标 API 的三层架构。
```mermaid
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 兼容接口),是代理请求的最终目的地。
## 关键实现路径
1. **请求接收**:FastAPI 的 `@app.api_route("/{path:path}")` 装饰器捕获所有传入请求。
2. **请求解析**:`Request` 对象用于获取请求方法、头部、查询参数和请求体。
3. **头部处理**:移除 `Host` 头,添加 `Authorization: Bearer` 头,并强制设置 `User-Agent`。
4. **URL 构建**:根据 `GEMINI_BASE_URL` 和传入的 `path` 构建目标 API 的完整 URL。
5. **请求转发**:使用 `httpx.AsyncClient().request()` 异步发送请求到目标 API。
6. **响应处理**:将目标 API 的 `content`、`status_code` 和 `headers` 封装成 `FastAPI.Response` 返回给客户端。
7. **错误处理**:捕获 `httpx.RequestError` 和 `httpx.HTTPStatusError`,并转换为 `HTTPException` 返回给客户端。
|