# P1-7 admin-web API 完整 PRD 评估报告 > 日期:2026-05-04 / 触发:Neo 在 04b P1-7 反馈选 A 完整 PRD > Neo 原话:"在梳理完整 PRD 时,我希望你能顺便发现一些 API 的问题,比如 API 设计是否合理,架构是否合理,API 背后的处理是否合理清晰,性能可用性稳定性安全性是否需要优化,一些糟糕的 API 是否需要重构合并等评估。" **本文不是 PRD 本身,是给 Neo 的"工作量评估 + 实施建议"**,用来判断"现在做、Wave 5 做、还是单开会话做"。 ## 一、工作量评估 ### 1.1 范围盘点 admin-web 后端 API 来源: - **44 个后端 router**(从 `apps/backend/app/main.py` L203-L246 挂载列表) - 其中 admin-web 调用约 **20+ router**(admin_*、env_config、db_viewer、etl_status、execution、schedules、tasks、wx_callback、ops_panel、business_day、internal_*、trigger_jobs) - 估算 admin-web 实际调用 **80-120 个 API 端点** ### 1.2 单 API 撰写时长(基于 NS1 风格) 每个 API 完整 PRD 包含: - 路径 + method + 权限要求 - 请求 schema(字段名 / 类型 / 必填 / 描述 / 示例) - 响应 schema(同上) - 业务语义(2-4 行) - 错误码(典型 4xx / 5xx) - 调用方(哪个前端组件) - 数据来源(哪个 service / 表) 每个 API 仔细写完整 = **20-30 分钟**(含读代码反推 schema)。 ### 1.3 总工作量 | 维度 | 估算 | |---|---| | 仅 PRD(不评估) | 80 个 API × 25 分钟 = **33 小时**(约 4 工作日) | | PRD + 设计/架构评估 | +30%-50% = **45-50 小时**(5-6 工作日) | | PRD + 评估 + 性能/安全/可用性专项 | +20-30% 再加 = **60-65 小时**(7-8 工作日) | **完整版(Neo 要的全套):预计 60-65 小时,1.5-2 周专人时间**。 ## 二、Neo 的"顺便评估"分解 ### 2.1 API 设计是否合理 需要校核 9 个维度: - RESTful 路径风格(`/api/admin/ai/triggers/:id` vs `/api/admin/ai-trigger-configs/:id`) - HTTP method 语义(GET / POST / PATCH / DELETE 是否对应 CRUD) - 请求 / 响应字段命名(camelCase vs snake_case 一致性) - 路径前缀(`/api/admin/*` vs `/api/admin/*/v2` vs 无前缀) - 错误响应结构统一性 - 分页约定(page/size vs limit/offset vs cursor) - 认证授权要求(super_admin / site_admin / 任何登录) - 幂等性约定(POST 是否幂等 / 重试安全) - 国际化(暂无,但应记录) **预计发现 30-50 个不一致点**(基于 Wave 0 调研的零散发现规模推算)。 ### 2.2 架构是否合理 需要校核: - router → service → repository 分层是否清晰 - 跨模块调用边界(避免 router 直接调另一个 router 的 service) - 全局响应包装中间件覆盖率 - 数据库连接生命周期(每请求一连接 vs 连接池复用) - WebSocket 与 REST 的边界 ### 2.3 API 处理是否合理清晰 需要校核: - 业务逻辑放 router / service / repository 哪一层 - 错误处理是否完备(try-except 粒度) - 日志埋点完整性 - 请求参数验证(Pydantic schema 完整性) ### 2.4 性能 / 可用性 / 稳定性 需要校核: - 慢查询(N+1 / 全表 scan / 缺索引) - 大数据量响应(>10MB) - 长事务 - 锁等待 - 缓存策略 - 超时配置 - 限流配置(暂无) - 幂等保护 - 降级策略(暂无) ### 2.5 安全性 需要校核: - 认证(JWT / session / cookie) - 授权粒度(super_admin / site_admin / 业务用户) - SQL 注入(Pydantic + asyncpg 默认安全,但要校 raw SQL 处) - XSS / CSRF(admin-web 是否启用) - 敏感数据脱敏(token / 密码不入日志) - 越权访问(site_id 隔离边界) **P0-8 DBViewer SELECT 拦截不全已是发现的安全问题(本次评估应包含此处)**。 ### 2.6 重构合并候选 需要识别: - 同表多 API(P1-6 双 API 已发现) - 极少调用 API(grep 前端无引用) - 历史 dev/test API 进入生产 - 重复逻辑(同样的 service 函数被多 router 调) ### 2.7 完整产出会发现的问题(预估) | 类别 | 预估问题数 | |---|---| | 设计不一致(P2 体验) | 30-50 | | 架构 / 分层(P1) | 5-10 | | 性能(P1 / P2) | 5-15 | | 安全(P0 / P1) | 5-10 | | 重构合并候选(P2) | 10-20 | | **合计** | **55-105 个工单** | ## 三、推荐拆分方案(Neo 选) ### 方案 A:**一次性完成**(推荐少数情况) - 1.5-2 周专人时间 + 持续输出 PRD + 评估 - 优:全局视角,问题之间可以串联;一次性建立起完整文档体系 - 劣:阻塞 Wave 1-5 的具体修复;评估结果如未及时落地会过期 ### 方案 B:**分批推进**(推荐) 把 API 按模块分 5-6 批,每批与一个 Wave 协同: | 批次 | 模块 | 时机 | 工作量 | |---|---|---|---| | 1 | Runtime Context + AI 管理(admin_ai / admin_runtime_context) | Wave 1 | 5-8 API,1.5 工作日 | | 2 | ETL 任务管理(tasks / execution / etl_status / business_day / schedules) | Wave 4 | 15-20 API,3-4 工作日 | | 3 | 触发器(admin_triggers / trigger_jobs) | 同 Wave 1 | 8-10 API,1.5 工作日 | | 4 | 租户管理 / 用户审核(admin_tenant_admins / admin_applications) | Wave 5 | 5-8 API,1.5 工作日 | | 5 | 系统设置 / 日志(env_config / admin_dev_trace / db_viewer / admin_db_health) | Wave 5 | 8-12 API,2 工作日 | | 6 | 内部 API(internal_ai / internal_events / wx_callback) | Wave 5 | 5-8 API,1 工作日 | **总工作量分散到 5 个 Wave,每个 Wave 1-2 工作日**;评估结论与 Wave 修复同步落地,不脱节。 ### 方案 C:**最小可行先行**(快速止损) 只产出"API 总览 + 问题清单",**不写完整每个 API 的 schema 描述**,聚焦"哪些有问题、为什么、怎么修"。 | 工作 | 工作量 | |---|---| | API 总览(80 行表格) | 0.5 工作日 | | 问题清单(50-100 条) | 1-1.5 工作日 | | **合计** | **2 工作日** | 优:最快揭露问题;劣:不补 schema 文档,新人 onboarding 仍要读代码 ### 方案 D:**自动生成 + 人工审核** 利用 FastAPI 自动 OpenAPI: - `/openapi.json` 已有(本次会话验证过)→ 自动生成 80 个 API 的 schema 描述 - 人工补"业务语义""权限""调用方""问题点" | 工作 | 工作量 | |---|---| | 提取 OpenAPI + 转 markdown | 0.5 工作日 | | 人工补语义 / 权限 / 调用方 | 2 工作日 | | 问题评估(同方案 C) | 1.5 工作日 | | **合计** | **4 工作日** | 优:Schema 自动化;劣:OpenAPI 默认描述质量取决于代码注释完整度 ## 四、推荐路径 **强烈推荐方案 B(分批推进)+ 方案 D(自动生成)的混合**: 1. 立即:用 OpenAPI 自动生成 80 个 API 总表(0.5 工作日)→ 产出到 `docs/_overview/admin-web-api-overview.md` 2. Wave 1 协同时:细化 Wave 1 涉及的 5-8 个 API(Runtime Context + AI 管理),发现问题立即修 3. 后续每个 Wave:按方案 B 表逐批推进 4. 最终聚合:在 Wave 5 末尾把 6 批合并成一份 `NS-admin-web-backend-api.md` **预计总工作量**:8-10 工作日,**分散到 5 个 Wave**,不阻塞主线。 ## 五、给 Neo 的决策提问 1. 是否接受方案 B + 方案 D 混合(推荐) 2. 是否同意 Wave 1 立即开始批 1(Runtime Context + AI 管理)? 3. 评估问题打分级别(P0/P1/P2)的判定标准是否参考 04 文档冲突? 4. 评估发现的"重构合并候选"如果数量大(预估 10-20 个),是否要再开一个 Wave 6 专门做架构重构? --- > 本评估不是 PRD 本身,是工作量与拆分建议。Neo 拍板方案后,主线启动批 1。