mcpField
D
docyrus-api-doctor

docyrus-api-doctor

github.com/docyrus测试与质量1391 次安装5 周前更新
代码仓库

关于 docyrus-api-doctor

docyrus-api-doctor 是面向 Docyrus API 开发者的实现后检查清单技能,按错误、性能和代码质量分类检查,并提供详细说明与修复示例。

主要功能

  1. 01检查 API 调用与查询参数
  2. 02发现性能和数据获取问题
  3. 03检查错误处理与缓存失效
  4. 04提供详细检查说明和修复示例

适用场景

  1. 01复查修改后的 Docyrus API 逻辑
  2. 02查找无效的查询载荷
  3. 03检查变更处理与缓存更新

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/docyrus/agent-skills --skill docyrus-api-doctor

安装后在 Claude Code 中输入/docyrus-api-doctor确认已加载。

附带文件references/checklist-details.md

详细介绍

Docyrus API 诊断工具

Docyrus API 代码的实现后检查清单。编写或修改 API 逻辑后,请逐项执行所有适用的检查。完成任务前,请修复发现的所有问题。

使用方法: 实现 API 逻辑后,对照以下各项检查已更改的代码。跳过不适用于当前代码的检查。如需查看详细说明和修复示例,请阅读 references/checklist-details.md。


BUG — 将导致错误

#检查项检查内容
B1缺少 columns 参数任何未包含 columns 属性的 .list() 或 .get() 调用。若不指定该属性,只会返回 id。
B2查询负载中的 limit: 0将 limit 设为 0 会导致 API 错误。请完全移除 limit,或将其设为正整数。
B3子查询键未包含在 columns 中如果 childQueries 定义了键 orders,则字符串 orders 也必须出现在 columns 中。
B4公式键未包含在 columns 中如果 formulas 定义了键 total,则字符串 total 也必须出现在 columns 中。
B5通过 @ 列语法进行聚合在列中使用 count@field 或 sum@field。请改用 calculations 参数。
B6distinctColumns 与 calculations 同时使用两者互斥。请使用 calculations 进行聚合。
B7公式 extract 的输入数量extract 块必须恰好有 1 个输入。
B8公式 not 的操作数数量not 块必须恰好有 1 个操作数。
B9公式 and/or 的操作数数量and/or 块必须至少有 2 个操作数。
B10公式数学运算的操作数数量数学运算(+、-、*、/、%)必须至少有 2 个操作数。
B11公式 case 缺少 whencase 表达式必须至少有 1 个 when 子句。
B12jsonb_build_object 中未显式转换类型的字面值jsonb_build_object 中的字符串字面值需要显式指定 "cast": "text"——自动类型转换仅适用于 concat/concat_ws 内部。

PERFORMANCE — 降低速度或浪费资源

#检查项检查内容
P1聚合查询中不必要的 limit使用 calculations 且不需要原始行时,不要发送 limit。聚合会自然返回单个分组结果。
P2仅为获取总数而使用 fullCount如果只需要计数(而不需要行),请使用 calculations: [{ func: 'count', field: 'id', name: 'total' }],而不是结合行获取使用 fullCount: true。
P3仅用于计算的查询中不必要的 columns使用 calculations 且只读取聚合值时,不要发送 columns。无需选择列也会返回计算结果。
P4获取过多列columns 中选取的列未被使用代码读取。只选择需要呈现或处理的列。
P5使用较大的 limit 但未分页未使用 offset/fullCount 分页时,limit > 200 可能导致响应缓慢和内存占用过高。
P6缺少 expand 导致 N+1 查询呈现关联/枚举/用户字段的 .name,却未在 expand 中包含该字段。若不使用 expand,只会得到 ID。
P7为检查是否存在记录而获取行仅为检查是否存在记录而获取记录。请改用 calculations 计数。
P8重复且重叠的查询对同一数据源执行多个查询,获取重叠的列,而这些查询本可合并为一个。

代码质量 — 增加维护负担

#检查项检查内容
Q1对响应大量使用 as 类型断言使用 as Array<...> 转换 API 响应,却不进行运行时验证。优先使用带类型的集合返回类型,或添加验证。
Q2依赖查询缺少 enableduseQuery 依赖运行时值(例如 recordId),但缺少 enabled: !!recordId。查询会在值为 undefined 时触发。
Q3变更操作缺少错误处理调用 .create()、.update()、.delete() 时没有 try/catch,也没有向用户反馈错误。
Q4变更后缺少查询失效处理创建/更新/删除后,必须使相关查询键失效,以便刷新列表。
Q5依次执行缓存失效操作多个 await queryClient.invalidateQueries(...) 按顺序执行。对于互不依赖的失效操作,请使用 Promise.all()。
Q6使用已弃用的 expandTypes替换为 expand 参数。
Q7数据源路径硬编码使用原始的 client.get('/v1/apps/base/data-sources/project/items'),而不是使用生成的集合钩子。
Q8distinctColumns 未搭配 orderBydistinctColumns 需要 orderBy 来指定每个分组中保留哪一行。

如何运行

  1. 找出本任务中所有包含 Docyrus API 调用的已更改文件
  2. 对每个文件,检查 .list(、.get(、.create(、.update(、.delete(、client.get(、client.post(、client.patch(、client.delete(
  3. 根据 BUG 检查项(B1-B12)检查每个调用位置
  4. 根据 PERFORMANCE 检查项(P1-P8)检查查询负载
  5. 根据 CODE QUALITY 检查项(Q1-Q8)检查周边代码(钩子、错误处理、失效处理)
  6. 修复发现的所有问题,从 BUG 类别开始

参考资料

  • references/checklist-details.md — 每项检查的详细说明、检测模式以及修复前后的示例

评论

支持 Markdown