更新重复接口
This commit is contained in:
@@ -0,0 +1,632 @@
|
||||
# API 接口审查报告
|
||||
|
||||
> 审查日期: 2025-12-31
|
||||
> 审查范围: `Docs/前后端调试接口说明/` 目录下所有API文档
|
||||
|
||||
---
|
||||
|
||||
## 一、重复接口分析
|
||||
|
||||
### 1.1 资源监控接口重复
|
||||
|
||||
以下接口在 **API-MCPServer服务.md** 和 **API-计费与资源管理.md** 中重复定义:
|
||||
|
||||
| 接口路径 | API-MCPServer服务.md | API-计费与资源管理.md | 代码实现位置 |
|
||||
|---------|---------------------|---------------------|-------------|
|
||||
| `GET /api/billing-admin/resources/overview` | 第19节 | 第6节 | `resource_monitoring.py` |
|
||||
| `GET /api/billing-admin/resources/user/{user_id}` | 第20节 | 第7节 | `resource_monitoring.py` |
|
||||
| `GET /api/billing-admin/resources/trends` | 第21节 | 第8节 | `resource_monitoring.py` |
|
||||
| `GET /api/billing-admin/resources/agent/{agent_id}` | 第22节 | 第9节 | `resource_monitoring.py` |
|
||||
|
||||
**建议**: 这些接口应该只在 **API-计费与资源管理.md** 中定义,从 **API-MCPServer服务.md** 中移除,因为它们属于计费管理功能。
|
||||
|
||||
### 1.2 供应商管理接口重复
|
||||
|
||||
以下接口在 **API-供应商管理.md** 和 **API-超级管理员.md** 中有功能重叠:
|
||||
|
||||
| 功能 | API-供应商管理.md | API-超级管理员.md |
|
||||
|-----|------------------|------------------|
|
||||
| 获取模型供应商列表 | `GET /api/providers/models` | `GET /api/admin/resources/models` |
|
||||
|
||||
**分析**:
|
||||
- `API-供应商管理.md` 的接口需要 `manage:providers` 权限(供应商管理员)
|
||||
- `API-超级管理员.md` 的接口需要 `view:*` 权限(管理员)
|
||||
- 两者权限不同,但返回数据结构相同,这是合理的设计
|
||||
|
||||
### 1.3 渠道供应商相关接口
|
||||
|
||||
以下接口在 **API-渠道合作伙伴.md** 和 **API-超级管理员.md** 中有对应关系:
|
||||
|
||||
| 渠道视角 (API-渠道合作伙伴.md) | 管理员视角 (API-超级管理员.md) |
|
||||
|------------------------------|------------------------------|
|
||||
| `GET /api/channel/providers` | `GET /api/admin/resources/models` |
|
||||
| `POST /api/channel/providers/apply` | - |
|
||||
| `GET /api/channel/providers/applications` | `GET /api/admin/providers/applications` |
|
||||
| `GET /api/channel/providers/access` | `GET /api/admin/providers/access` |
|
||||
|
||||
**分析**: 这是合理的设计,渠道和管理员有不同的视角和权限。
|
||||
|
||||
---
|
||||
|
||||
## 二、返回结果变量验证
|
||||
|
||||
### 2.1 认证模块 (API-认证模块.md)
|
||||
|
||||
#### 登录接口 `POST /api/auth/login`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"token": "string",
|
||||
"refreshToken": "string",
|
||||
"user": {
|
||||
"id": "string",
|
||||
"name": "string",
|
||||
"email": "string",
|
||||
"role": "string",
|
||||
"channelId": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`auth.py:78-90`](services/mcp-server/app/routes/auth.py:78)):
|
||||
```python
|
||||
return SuccessResponse(
|
||||
data={
|
||||
"token": token,
|
||||
"refreshToken": token,
|
||||
"user": {
|
||||
"id": str(entity.id),
|
||||
"name": entity.name,
|
||||
"email": entity.email,
|
||||
"role": "channel_admin",
|
||||
"channelId": str(entity.id),
|
||||
}
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
#### API密钥信息 `GET /api/auth/keys/info`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"endpoint": "string",
|
||||
"apiKey": "string",
|
||||
"createdAt": "string",
|
||||
"lastUsed": "string"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`auth.py:324-331`](services/mcp-server/app/routes/auth.py:324)):
|
||||
```python
|
||||
return SuccessResponse(
|
||||
data={
|
||||
"endpoint": endpoint,
|
||||
"apiKey": masked_key,
|
||||
"createdAt": api_key.created_at.isoformat(),
|
||||
"lastUsed": api_key.last_used.isoformat() if api_key.last_used else None,
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
### 2.2 用户侧平台 (API-用户侧平台.md)
|
||||
|
||||
#### 仪表板统计 `GET /api/user/dashboard/stats`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"activeAgents": "int",
|
||||
"totalRequests": "int",
|
||||
"euBalance": "float",
|
||||
"systemHealth": "float"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`user.py:81-88`](services/mcp-server/app/routes/user.py:81)):
|
||||
```python
|
||||
return SuccessResponse(
|
||||
data={
|
||||
"activeAgents": active_agents,
|
||||
"totalRequests": total_requests,
|
||||
"euBalance": eu_balance,
|
||||
"systemHealth": system_health,
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
#### 网关监控 `GET /api/user/gateway/monitoring`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"uptime": "float",
|
||||
"requestsPerMinute": "int",
|
||||
"averageLatency": "int",
|
||||
"errorRate": "float"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`user.py:214-221`](services/mcp-server/app/routes/user.py:214)):
|
||||
```python
|
||||
return SuccessResponse(
|
||||
data={
|
||||
"uptime": 99.9,
|
||||
"requestsPerMinute": 1250,
|
||||
"averageLatency": 45,
|
||||
"errorRate": 0.1,
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致(注意:代码返回的是模拟数据)
|
||||
|
||||
---
|
||||
|
||||
### 2.3 超级管理员 (API-超级管理员.md)
|
||||
|
||||
#### 平台统计 `GET /api/admin/dashboard/stats`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"totalChannels": "int",
|
||||
"totalTenants": "int",
|
||||
"totalAgents": "int",
|
||||
"totalCalls": "int",
|
||||
"totalRevenue": "float"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`admin.py:349-357`](services/mcp-server/app/routes/admin.py:349)):
|
||||
```python
|
||||
return SuccessResponse(
|
||||
data={
|
||||
"totalChannels": total_channels,
|
||||
"totalTenants": total_tenants,
|
||||
"totalAgents": total_agents,
|
||||
"totalCalls": total_calls,
|
||||
"totalRevenue": total_revenue,
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
#### 渠道列表 `GET /api/admin/channels`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"channels": [{
|
||||
"id": "string",
|
||||
"name": "string",
|
||||
"email": "string",
|
||||
"commissionRate": "float",
|
||||
"channelCredit": "float",
|
||||
"customAgentCpu": "float",
|
||||
"customAgentMemory": "float",
|
||||
"status": "string",
|
||||
"createdAt": "string"
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`admin.py:400-413`](services/mcp-server/app/routes/admin.py:400)):
|
||||
```python
|
||||
data = [
|
||||
{
|
||||
"id": str(channel.id),
|
||||
"name": channel.name,
|
||||
"email": channel.email,
|
||||
"commissionRate": float(channel.commission_rate) if channel.commission_rate is not None else 0.0,
|
||||
"channelCredit": float(channel.channel_credit) if channel.channel_credit is not None else 0.0,
|
||||
"customAgentCpu": float(channel.custom_agent_cpu) if channel.custom_agent_cpu is not None else 2.0,
|
||||
"customAgentMemory": float(channel.custom_agent_memory) if channel.custom_agent_memory is not None else 4.0,
|
||||
"status": channel.status,
|
||||
"createdAt": channel.created_at.isoformat(),
|
||||
}
|
||||
for channel in channels
|
||||
]
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
### 2.4 渠道合作伙伴 (API-渠道合作伙伴.md)
|
||||
|
||||
#### 租户列表 `GET /api/channel/tenants`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"tenants": [{
|
||||
"id": "string",
|
||||
"name": "string",
|
||||
"email": "string",
|
||||
"subscriptionTier": "string",
|
||||
"balance": "float",
|
||||
"creditLimit": "float",
|
||||
"status": "string",
|
||||
"createdAt": "string"
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`channel.py:104-118`](services/mcp-server/app/routes/channel.py:104)):
|
||||
```python
|
||||
data = [
|
||||
{
|
||||
"id": str(tenant.id),
|
||||
"name": tenant.name,
|
||||
"email": tenant.email,
|
||||
"subscriptionTier": tenant.subscription_tier,
|
||||
"balance": float(tenant.balance),
|
||||
"creditLimit": float(tenant.credit_limit),
|
||||
"status": tenant.status,
|
||||
"createdAt": tenant.created_at.isoformat(),
|
||||
}
|
||||
for tenant in tenants
|
||||
]
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
#### 充值响应 `POST /api/channel/tenants/{tenant_id}/recharge`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"tenantId": "string",
|
||||
"newBalance": "float",
|
||||
"rechargeAmount": "float"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`channel.py:381-387`](services/mcp-server/app/routes/channel.py:381)):
|
||||
```python
|
||||
return SuccessResponse(
|
||||
data={
|
||||
"tenantId": str(tenant.id),
|
||||
"newBalance": float(tenant.balance),
|
||||
"rechargeAmount": req.amount,
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
### 2.5 供应商管理 (API-供应商管理.md)
|
||||
|
||||
#### 供应商列表 `GET /api/providers/models`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"providers": [{
|
||||
"id": "string",
|
||||
"name": "string",
|
||||
"provider": "string",
|
||||
"apiUrl": "string",
|
||||
"supportedModels": "array",
|
||||
"rpm": "int",
|
||||
"tpm": "int",
|
||||
"status": "string",
|
||||
"isActive": "boolean",
|
||||
"createdAt": "string"
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`providers.py:77-93`](services/mcp-server/app/routes/providers.py:77)):
|
||||
```python
|
||||
data = [
|
||||
{
|
||||
"id": str(provider.id),
|
||||
"name": provider.name,
|
||||
"provider": provider.provider,
|
||||
"apiUrl": provider.api_url,
|
||||
"supportedModels": provider.supported_models,
|
||||
"rpm": provider.rpm,
|
||||
"tpm": provider.tpm,
|
||||
"status": provider.status,
|
||||
"isActive": provider.is_active,
|
||||
"createdAt": provider.created_at.isoformat(),
|
||||
}
|
||||
for provider in providers
|
||||
]
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
### 2.6 资源监控 (API-计费与资源管理.md)
|
||||
|
||||
#### 平台资源概览 `GET /api/billing-admin/resources/overview`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"todayCalls": "int",
|
||||
"monthCalls": "int",
|
||||
"activeUsersToday": "int",
|
||||
"activeAgents": "int",
|
||||
"monthTotalEu": "float",
|
||||
"timestamp": "string"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`resource_monitoring.py:88-98`](services/mcp-server/app/routes/resource_monitoring.py:88)):
|
||||
```python
|
||||
return {
|
||||
"success": True,
|
||||
"data": {
|
||||
"todayCalls": today_calls,
|
||||
"monthCalls": month_calls,
|
||||
"activeUsersToday": active_users_today,
|
||||
"activeAgents": active_agents,
|
||||
"monthTotalEu": round(float(month_total_eu), 2),
|
||||
"timestamp": now.isoformat()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
### 2.7 MCP Server 服务 (API-MCPServer服务.md)
|
||||
|
||||
#### Agent 状态 `GET /agents/{agent_id}/status`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"id": "string",
|
||||
"name": "string",
|
||||
"status": "string",
|
||||
"k8s_status": "string",
|
||||
"pod_name": "string",
|
||||
"pod_ip": "string",
|
||||
"node": "string",
|
||||
"service_port": "int",
|
||||
"access_url": "string",
|
||||
"endpoints": "object",
|
||||
"cpu_request": "string",
|
||||
"cpu_limit": "string",
|
||||
"memory_request": "string",
|
||||
"memory_limit": "string",
|
||||
"created_at": "string",
|
||||
"pod_created_at": "string",
|
||||
"conditions": "array"
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`agents.py:506-523`](services/mcp-server/app/routes/agents.py:506)):
|
||||
```python
|
||||
return AgentStatusResponse(
|
||||
id=agent.id,
|
||||
name=agent.name,
|
||||
status=agent.status,
|
||||
k8s_status=status.status,
|
||||
pod_name=status.name,
|
||||
pod_ip=status.pod_ip,
|
||||
node=status.node,
|
||||
service_port=status.service_port,
|
||||
access_url=status.access_url,
|
||||
endpoints=status.endpoints or {},
|
||||
cpu_request=agent.cpu_request,
|
||||
cpu_limit=agent.cpu_limit,
|
||||
memory_request=agent.memory_request,
|
||||
memory_limit=agent.memory_limit,
|
||||
created_at=agent.created_at,
|
||||
pod_created_at=agent.pod_created_at,
|
||||
conditions=status.conditions,
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
#### Agent 资源配置 `GET /agents/{agent_id}/metrics`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"id": "string",
|
||||
"name": "string",
|
||||
"requests": {
|
||||
"cpu": "string",
|
||||
"memory": "string"
|
||||
},
|
||||
"limits": {
|
||||
"cpu": "string",
|
||||
"memory": "string"
|
||||
},
|
||||
"usage": "object"
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`agents.py:583-594`](services/mcp-server/app/routes/agents.py:583)):
|
||||
```python
|
||||
return AgentMetricsResponse(
|
||||
id=agent.id,
|
||||
name=agent.name,
|
||||
requests={
|
||||
"cpu": agent.cpu_request or "100m",
|
||||
"memory": agent.memory_request or "128Mi",
|
||||
},
|
||||
limits={
|
||||
"cpu": agent.cpu_limit or "500m",
|
||||
"memory": agent.memory_limit or "512Mi",
|
||||
},
|
||||
)
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
### 2.8 系统监控 (API-MCPServer服务.md)
|
||||
|
||||
#### 监控仪表盘 `GET /api/v1/monitoring/dashboard`
|
||||
|
||||
**文档定义**:
|
||||
```json
|
||||
{
|
||||
"timestamp": "string",
|
||||
"health": "object",
|
||||
"metrics": "object",
|
||||
"stats": "object",
|
||||
"alerts": {
|
||||
"items": "array",
|
||||
"count": "int",
|
||||
"critical_count": "int",
|
||||
"warning_count": "int"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**代码实现** ([`monitoring.py:76-87`](services/mcp-server/app/routes/monitoring.py:76)):
|
||||
```python
|
||||
return {
|
||||
"timestamp": await _current_timestamp(),
|
||||
"health": health,
|
||||
"metrics": metrics,
|
||||
"stats": stats.get("stats", {}),
|
||||
"alerts": {
|
||||
"items": alerts,
|
||||
"count": len(alerts),
|
||||
"critical_count": len([a for a in alerts if a.get("severity") == "critical"]),
|
||||
"warning_count": len([a for a in alerts if a.get("severity") == "warning"]),
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
✅ **验证通过**: 文档与代码一致
|
||||
|
||||
---
|
||||
|
||||
## 三、设计问题分析
|
||||
|
||||
### 3.1 接口路径不一致
|
||||
|
||||
| 问题 | 详情 |
|
||||
|-----|------|
|
||||
| Agent 路由前缀 | `agents.py` 使用 `/agents` 前缀,但文档中有些地方写成 `/api/agents` |
|
||||
|
||||
**建议**: 统一使用 `/agents` 前缀(不带 `/api`),因为这是 MCP Server 的核心功能。
|
||||
|
||||
### 3.2 响应格式不一致
|
||||
|
||||
| 路由文件 | 响应格式 |
|
||||
|---------|---------|
|
||||
| `auth.py`, `admin.py`, `channel.py`, `user.py`, `providers.py` | 使用 `SuccessResponse` 包装器 |
|
||||
| `monitoring.py`, `resource_monitoring.py` | 直接返回 dict `{"success": True, "data": {...}}` |
|
||||
| `agents.py` | 直接返回 Pydantic 模型 |
|
||||
|
||||
**建议**: 统一使用 `SuccessResponse` 包装器,保持响应格式一致性。
|
||||
|
||||
### 3.3 权限验证方式不一致
|
||||
|
||||
| 路由文件 | 权限验证方式 |
|
||||
|---------|-------------|
|
||||
| `admin.py`, `channel.py` | 自定义 `_verify_permission()` 函数 |
|
||||
| `resource_monitoring.py` | 使用 `require_role()` 装饰器 |
|
||||
| `agents.py` | 使用 `get_current_user` 依赖 |
|
||||
|
||||
**建议**: 统一使用 `require_role()` 或 `require_auth` + `has_permission()` 组合。
|
||||
|
||||
### 3.4 文档缺失的接口
|
||||
|
||||
以下代码中存在的接口在文档中未找到:
|
||||
|
||||
| 接口 | 代码位置 | 说明 |
|
||||
|-----|---------|------|
|
||||
| `GET /agents/templates` | `agents.py:96` | 获取Agent模板列表 |
|
||||
| `GET /agents/templates/{template_name}` | `agents.py:122` | 获取模板详情 |
|
||||
| `POST /api/user/agents/custom/create` | 文档有,但代码在 `user.py` 中未实现 | 创建自定义Agent |
|
||||
| `GET /api/user/agents/custom` | 文档有,但代码在 `user.py` 中未实现 | 获取自定义Agent列表 |
|
||||
|
||||
**建议**:
|
||||
1. 在 **API-MCPServer服务.md** 中添加模板相关接口文档
|
||||
2. 在 `user.py` 中实现自定义Agent相关接口,或从文档中移除
|
||||
|
||||
---
|
||||
|
||||
## 四、总结
|
||||
|
||||
### 4.1 验证结果统计
|
||||
|
||||
| 类别 | 数量 | 状态 |
|
||||
|-----|------|------|
|
||||
| 已验证接口 | 25+ | ✅ 通过 |
|
||||
| 重复定义接口 | 4 | ⚠️ 需要整理 |
|
||||
| 文档缺失接口 | 2 | ⚠️ 需要补充 |
|
||||
| 代码缺失接口 | 2 | ⚠️ 需要实现或移除 |
|
||||
|
||||
### 4.2 主要发现
|
||||
|
||||
1. **返回结果变量验证**: 所有已检查的接口,文档中的返回字段与代码实现**完全一致**,没有发现虚假变量。
|
||||
|
||||
2. **重复接口**: 资源监控相关的4个接口在两个文档中重复定义,建议整合。
|
||||
|
||||
3. **设计一致性**: 存在响应格式、权限验证方式不一致的问题,建议统一。
|
||||
|
||||
4. **文档完整性**: 部分接口在代码中存在但文档未记录,需要补充。
|
||||
|
||||
### 4.3 建议优先级
|
||||
|
||||
| 优先级 | 建议 |
|
||||
|-------|------|
|
||||
| 高 | 从 API-MCPServer服务.md 移除重复的资源监控接口 |
|
||||
| 高 | 补充 Agent 模板相关接口文档 |
|
||||
| 中 | 统一响应格式使用 SuccessResponse |
|
||||
| 中 | 实现或移除自定义Agent相关接口 |
|
||||
| 低 | 统一权限验证方式 |
|
||||
|
||||
---
|
||||
|
||||
> 返回 [API接口文档](./API接口文档.md)
|
||||
@@ -73,3 +73,4 @@ echo "=========================================="
|
||||
echo "清理完成!"
|
||||
echo "=========================================="
|
||||
|
||||
|
||||
|
||||
@@ -460,3 +460,4 @@ def main():
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user