You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

3.2 KiB

0024. Bruno 接口文档页面归属采用菜单粒度

状态: 已接受

冷启动生成的 collection 按类级 @Tag 聚合:LeadController 类级 @Tag("线索管理") 导致 23 个接口平铺在一个文件夹,而文档受众是前端,心智模型是菜单页——「我开发 /lead/public-pool,要用哪些接口、viewType 传什么」。菜单有两处候选真相源:LeadPermissionInitializer seed(公海 / 我的线索 / 我的关注 / 线索管理,挂「线索管理」目录)与产品原型(线索管理一级文件夹 → 线索公海 / 我的线索 / 我的关注 / 线索管理 / 线索设置),措辞不完全一致。

决策

  1. 文档页面归属 = 菜单粒度,tag 命名以产品原型为准线索管理/线索公海线索管理/我的线索线索管理/我的关注线索管理/线索管理;「线索规则-公海池配置」改名「线索管理/线索设置」对齐原型。行政区划无菜单对应,保留资源命名。
  2. 真相源双层:归属 = Controller 方法级 @Operation(tags)(LeadController 23 个方法、ColumnPreferenceController 2 个方法全量挂 4 菜单;删除两处类级 @Tag,避免多出聚合文件夹);参数语义 = bruno-sync.config.jsonmenuBindings(菜单 → viewType / scopeKey 专属值,生成器据此在副本中替换示例值并注明「本页固定传」)。
  3. 四菜单共用接口全量副本(不做接口级页面裁剪):按钮显隐由前端权限点运行时控制(权限码全集下发接口已立 ticket .scratch/auth-perms/),文档不预估页面按钮集。
  4. 副本幂等维护:gen_bruno.py 重跑覆盖,前端只读;手改会在下次同步时丢失。
  5. scope_key 四值钉死(与 viewType 一一对应):lead.public_pool / lead.my_lead / lead.my_follow / lead.manage
  6. 视图对照:线索公海=PUBLIC_POOL=lead.public_pool · 我的线索=MY_LEAD=lead.my_lead · 我的关注=MY_FOLLOW=lead.my_follow · 线索管理=MANAGE=lead.manage(glossary 同步收词)。

考虑过的替代

  • 只把 page / stats / 列偏好按菜单出副本,命令接口留公共文件夹——被否:前端要单页自足,且「页面 × 命令」矩阵无真相源(button 权限点未 seed)。
  • 不改源码、纯 config 覆盖映射——被否:swagger UI 同样受益于菜单分组,映射应进业务代码(业务代码即文档)。
  • 生成器自行推断页面接口集——被否:无源可依,等同编故事,违背「结构听源码」铁律。

后果

  • collection 从 66 涨到 141 个 .bru;21 个命令接口副本零参数差异(仅 docs 前缀【X 页】不同),为已知代价,用户已确认前端不手改文档。
  • menuBindings(config)与 gen_bruno.pyMENUS 常量需人工保持同源。
  • seed 菜单名「公海」与原型「线索公海」不一致:seeder 按 name find-or-create,直接改字符串会 seed 出第二个菜单,需数据迁移(UPDATE sys_menu)才能统一——遗留待办,文档侧命名先行以原型为准。
  • swagger UI 分组从 1 个「线索管理」变为 4 个菜单组,前端打开后端 swagger 同样按菜单导航。