Files
Neo-ZQYY/docs/_overview/04b-feedback/P1-7-admin-api-prd-evaluation.md
Neo 509cf43284 chore(docs): Wave 0 调研产出 + P0/P1/P2 反馈调研
建立项目级标杆文档 docs/_overview/ 作为产品全景索引,
解决"PRD 零碎、文档膨胀、跨子系统调研无入口"的问题。

主要内容:
- 00-index 总索引 + 维护协议 + 与 CLAUDE.md 关系
- 01-product-overview 产品全景脑图(6 角色 / 6 子系统 / 数据流 /
  7 业务概念 / 8+1 AI 矩阵 / 22 术语)
- 02a-miniprogram-page-matrix 小程序 21 页业务指纹
- 02b-adminweb-page-matrix admin-web 19 路由业务指纹
- 03-test-spec 测试规范 (L1-L5 分层 + 走查模板 + 75-95 case 估算)
- 04-doc-conflicts 39 条冲突索引(P0×8 / P1×13 / P2×13 + 5 子项)
- 04a/b/c-conflicts-*-detail 业务故事卡(7 字段:关联/逻辑/影响/选项/判定)
- 05-orphan-pages-cleanup admin-web 6 孤儿页面处置(1 归档 + 4 保留)
- WAVES-MASTER-PLAN.md 全 Wave 主计划(0-5,共 22-32 工作日)
- WAVE-1-KICKOFF.md Wave 1 实施 kickoff
- GLOBAL-DECISION-DASHBOARD.md 全局决策仪表板

反馈调研产物:
- 04a-feedback/ P0 两轮反馈(8+8 项决策 + D-1/2/3 + F-1/2 子代理产出)
- 04b-feedback/ P1 两轮反馈(13+1+5 项 + E-1/2/3/4 + G-1/2 子代理产出)
- 04c-feedback/ P2 反馈(13 项 + 5 子项 + H-1/2/3 子代理产出)
- NEO-DECISIONS-LOG 累积决策记录

关键追加发现 8 处 D Bug(原蓝本 0):
- P0-3 看板沙箱接入(Wave 1 W1-T1)
- P0-5 致命 1 (4 处 fdw_etl 残留, 已修 commit 17f045a)
- P0-5 致命 2 (JWT aud 缺失, 已修 commit 17f045a)
- P0-6 clearAllTasks 守卫 (Wave 3)
- P0-8 DBViewer 黑名单漏 (已修 commit 17f045a)
- P1-3 task-detail 跳转传 task_id 而非 customer_id
- P2-7 board-finance 隐式 null
- 2 个独立 Bug (page_context.created_at + ClueCategory 字典)

参考: docs/_overview/00-index.md
2026-05-04 07:38:28 +08:00

7.2 KiB
Raw Blame History

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。