Files
safe-os-ui/API_Gateway_Rules.md

116 lines
6.4 KiB
Markdown
Raw Normal View History

# Safe OS UI - API Gateway 路由转发规则文档
本系统包含多个独立的后端AI服务规划系统、开发平台、质量门禁等。为了使前端统一指向单一入口并简化跨域和请求分发配置建议使用 API Gateway 进行统一路由和负载均衡。
以下是当前前端所有与后端服务交互的接口清单以及转发规则。Gateway 服务需要解析相应的路径前缀Ingress Prefix将请求 Rewrite 后转发至对应的内部后端服务。
---
## 整体架构与入口规则
- **统一入口 URL**`http://<api-gateway-host>:<port>` (前端将所有 API 请求指向此地址)
- **核心路由匹配策略**:基于 URL前缀 进行正则匹配或前缀匹配。
| 业务模块 | Ingress Prefix (外部路径) | Forward Target (内部服务地址) | Rewrite Rule (路径重写规则) |
| --- | --- | --- | --- |
| **Planning System** | `/planning-api/*` | `http://localhost:8090` | `/planning-api/(.*)``/api/$1` |
| **DevOps System** | `/devops-api/*` | `http://localhost:8000` | `/devops-api/(.*)``/$1` |
| **Quality Gate System** | `/quality-api/*` | `http://localhost:5000` | `/quality-api/(.*)``/api/$1` |
---
## 1. 规划子系统接口 (Planning System)
**底层服务**: `http://localhost:8090`
前缀重写规则:请求至统一入口 `.../planning-api/X` 会被转发至内部的 `.../api/X`
| 方法 | 外部暴露路径 (Gateway URL) | 内部转发路径 (Target URL) | 接口描述 |
| --- | --- | --- | --- |
| `POST` | `/planning-api/chat/stream` | `/api/chat/stream` | 铁三角 Agent发送大系统规划/史诗业务需求内容SSE流式数据返回 |
| `POST` | `/planning-api/upload` | `/api/upload` | 文档上传:支持用户上传附件作为系统知识或输入来源 |
---
## 2. 研发自动引擎接口 (DevOps System)
**底层服务**: `http://localhost:8000`
前缀重写规则:请求至统一入口 `.../devops-api/X` 会被去掉前缀,转为后端的 `.../X`。该系统重度依赖**SSE (Server-Sent Events) 流式连接**请在Gateway配置中确保不会缓冲或阻断流数据。
| 方法 | 外部暴露路径 (Gateway URL) | 内部转发路径 (Target URL) | 接口描述 |
| --- | --- | --- | --- |
| `POST` | `/devops-api/session/start` | `/session/start` | 新建研发自动化任务会话 (Session) |
| `POST` | `/devops-api/session/{sessionId}/clarify` | `/session/{sessionId}/clarify` | 基于需求说明进行需求澄清和补充 |
| `GET` | `/devops-api/session/{sessionId}/pm/stream` | `/session/{sessionId}/pm/stream` | PM角色执行需求细化分析流程 (SSE流) |
| `GET` | `/devops-api/session/{sessionId}/pm/refine/stream` | `/session/{sessionId}/pm/refine/stream` | 追加PM反馈继续流式提炼需求 (SSE流) |
| `GET` | `/devops-api/session/{sessionId}/qa/stream` | `/session/{sessionId}/qa/stream` | QA角色基于需求生成测试用例并执行评估 (SSE流) |
| `GET` | `/devops-api/session/{sessionId}/qa/refine/stream` | `/session/{sessionId}/qa/refine/stream` | 追加QA用例反馈并更新测试集 (SSE流) |
| `GET` | `/devops-api/session/{sessionId}/dev/stream` | `/session/{sessionId}/dev/stream` | 核心编码过程:依据需求、架构与测试生成最终业务/Java等工程代码 (SSE流) |
| `POST` | `/devops-api/session/{sessionId}/test/run` | `/session/{sessionId}/test/run` | 运行集成编译与单元/端到端测试并获取结果 |
| `GET` | `/devops-api/session/{sessionId}/test/fix/stream` | `/session/{sessionId}/test/fix/stream` | 针对测试错误进行的AI代码自动修复 (SSE流) |
*注意: `{sessionId}` 属于路径层级中的动态参数,具体网关转发时使用泛类型或通配符放行。*
---
## 3. 代码质量门禁接口 (Quality Gate)
**底层服务**: `http://localhost:5000`
前缀重写规则:请求至统一入口 `.../quality-api/X` 会被转发至后端内部的 `.../api/X`
| 方法 | 外部暴露路径 (Gateway URL) | 内部转发路径 (Target URL) | 接口描述 |
| --- | --- | --- | --- |
| `GET` | `/quality-api/prs` | `/api/prs` | 获取 PR 扫描工单列表(支持多种查询参数) |
| `GET` | `/quality-api/prs/history` | `/api/prs/history` | 获取 PR 处理历史,用于趋势看板 (e.g., `?limit=15`) |
| `GET` | `/quality-api/prs/{prId}` | `/api/prs/{prId}` | 获取某一条指定 PR 扫描记录的详细执行状态及摘要 |
| `GET` | `/quality-api/prs/{prId}/files` | `/api/prs/{prId}/files` | 拉取这条 PR 的被影响/改动的文件目录结构 |
| `GET` | `/quality-api/prs/{prId}/file` | `/api/prs/{prId}/file` | 获取PR里指定文件的 Diff 对象(包含行内审查反馈),附带 `?path=xxx` 查询参数 |
| `POST`| `/quality-api/prs/{prId}/merge` | `/api/prs/{prId}/merge` | 在门禁界面确认问题修缮无误后,合并该次 PR |
| `POST`| `/quality-api/prs/{prId}/close` | `/api/prs/{prId}/close` | 门禁审查不通过,拒绝/关闭此条扫描和合并申请 |
---
## Nginx Gateway 配置示例 (参考)
如果网关选用 Nginx可快速参考如下配置来完成上述 Rewrite 与 Proxy
```nginx
server {
listen 80;
server_name api-gateway.safe-os.local;
# 1. Planning API 转发
location /planning-api/ {
# 截取 /planning-api/ 后的内容,拼接到 /api/
rewrite ^/planning-api/(.*)$ /api/$1 break;
proxy_pass http://localhost:8090;
# 启用流连接所需的头信息
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
# 2. DevOps API 转发
location /devops-api/ {
# 截取 /devops-api/ 后的内容,直接拼接
rewrite ^/devops-api/(.*)$ /$1 break;
proxy_pass http://localhost:8000;
# 支撑 SSE (Server-Sent Events) 的流配置
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s; # 考虑大模型生成代码时间较长
}
# 3. Quality Gate API 转发
location /quality-api/ {
# 截取 /quality-api/ 后的内容,拼接到 /api/
rewrite ^/quality-api/(.*)$ /api/$1 break;
proxy_pass http://localhost:5000;
}
}
```
以上文档即针对前端当前服务现状所整理的 API Gateway 路由规划规范,您可以直接根据此规范开发 API Gateway 或调整 Nginx 等负载均衡器的配置。