GraphQL Inspector - Schema Diff 提供对 GraphQL Inspector diff 命令的专业知识,用于检测 GraphQL schema 版本之间的 breaking、non-breaking 和 dangerous 变更。
用途 用于在检测 GraphQL schema 版本之间的破坏性变更、跨分支比较 schema 或验证 schema 迁移时使用。其 diff 命令比较两个 GraphQL schema 并输出精确的变更列表,每个变更被归类为 breaking、non-breaking 或 dangerous,帮助团队防止 API 回归。
主要能力 基本比较:支持两个本地 schema 文件的比较,例如 npx @graphql-inspector/cli diff old-schema.graphql new-schema.graphql;支持与 git 分支、特定提交或标签比较,语法如 'git:origin/main:schema.graphql'、'git:abc123:schema.graphql'、'git:v1.0.0:schema.graphql';支持基于 URL 的比较,包括本地 schema 与远程端点、两个远程端点之间的比较。
命令选项:支持 --onlyBreaking 仅显示破坏性变更;--failOnDangerous 在危险变更时失败;--rule 指定自定义规则,如 suppressRemovalOfDeprecatedField;--json 以 JSON 输出。
变更分类:
- Breaking Changes(会破坏现有客户端):字段移除、类型移除、添加必填参数、类型变更、添加非空约束、联合成员移除、枚举值移除、接口字段移除。
- Dangerous Changes(可能破坏部分客户端):参数默认值变更、枚举值添加、可选参数添加、联合成员添加、类型实现接口、可空字段变为非空。
- Non-Breaking Changes(安全变更):添加字段、添加类型、添加可选参数、添加弃用标记、修改描述、添加指令。
配置:可创建 .graphql-inspector.yaml 配置 diff 规则,如 suppressRemovalOfDeprecatedField、suppressCommonPrefixChanges、considerUsage,并设置 failOnBreaking 和 failOnDangerous。schema 来源支持本地文件、git 引用、带 headers 的 URL、glob 模式。
CI/CD 集成:提供 GitHub Actions(在 pull_request 触发,检出后安装 @graphql-inspector/cli 并运行 diff)和 GitLab CI 配置示例。
基于使用的 diff:通过 --rule considerUsage 和 --documents "src/**/*.graphql" 检查破坏性变更是否影响实际操作,优势是仅标记影响真实操作的变更、允许安全移除未使用字段、减少大型 schema 中的误报。
联邦支持:通过 --federation 比较联邦 schema,如 npx @graphql-inspector/cli diff --federation old-subgraph.graphql new-subgraph.graphql。
使用方式 在部署前始终在 CI 中对每次 schema 变更运行 diff;使用 git 引用与主分支比较;启用使用检查减少噪音;移除字段前先添加 @deprecated 并保持弃用窗口;审查危险变更;在 PR 中自动评论 diff 结果;为发布打标签便于比较。
适用场景 规划 schema 迁移;在 pull request 中审查 schema 变更;设置 CI/CD 进行 schema 验证;部署前检测破坏性变更;比较生产与开发环境的 schema;审计 schema 的演进过程。
限制 无法确定资料中未明确说明的收费、价格、平台或具体效果;部分行为可能依赖 GraphQL Inspector 的具体版本和环境,相关文档未提供。