You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可基于GraphQL Schema与操作生成子集Schema的工具或代码

提取GraphQL Schema子集的实用工具与方案

针对你需要从大型GraphQL Schema中提取实际使用子集的需求,这里有几个易用的工具和方案,完全适配你做Mock隔离测试、跟踪Schema使用变化的场景:

1. GraphQL Code Generator(推荐,生态完善)

这是社区最常用的GraphQL代码生成工具,它的@graphql-codegen/schema-ast插件可以轻松提取操作依赖的Schema子集。

  • 配置方式:创建codegen.yml配置文件,指定原始Schema路径、你的操作文件路径,以及输出的子集Schema位置:
    schema: ./original-schema.graphql
    documents: ./src/**/*.graphql # 所有包含查询/突变的文件
    generates:
      ./subset-schema.graphql:
        plugins:
          - '@graphql-codegen/schema-ast'
        config:
          includeDirectives: true # 如果需要保留用到的指令
    
  • 运行方式:执行graphql-codegen命令,就能生成精准的子集Schema。
  • 额外优势:它可以和TypeScript类型生成、React Hooks生成等功能结合,长期维护时能自动同步子集Schema与业务代码的依赖关系,方便跟踪Schema使用的变化。

2. GraphQL Inspector(专注Schema分析)

这个工具主打Schema的对比、分析与提取,专门解决Schema相关的管理问题,非常适合你的跟踪需求。

  • 提取命令:直接在终端运行以下命令,就能从操作文件中提取子集Schema:
    graphql-inspector extract --schema ./original-schema.graphql --documents ./src/**/*.graphql ./output/subset-schema.graphql
    
  • 跟踪变化:它还支持diff命令,对比不同版本的子集Schema,帮你清晰看到哪些字段、类型新增或不再被业务代码使用,完美契合你跟踪Schema使用情况的需求。

3. 自定义脚本(适合定制化需求)

如果上面的工具不能满足你的特殊过滤规则,比如要排除某些内部类型,你可以用GraphQL官方工具包自己写脚本实现。

核心思路是解析原始Schema和操作文档,递归收集所有被用到的类型、字段、枚举,再生成新的Schema:

const { parse, print, buildASTSchema } = require('graphql');
const { loadSchema, loadDocuments } = require('@graphql-tools/load');
const { GraphQLFileLoader } = require('@graphql-tools/graphql-file-loader');

async function extractSubsetSchema() {
  // 加载原始Schema和业务操作文档
  const originalSchema = await loadSchema('./original-schema.graphql', { loaders: [new GraphQLFileLoader()] });
  const operationDocs = await loadDocuments('./src/**/*.graphql', { loaders: [new GraphQLFileLoader()] });

  // 收集所有被操作用到的类型、字段(这里需要实现递归收集逻辑)
  const usedTypes = new Set();
  // ... 省略收集逻辑,可通过遍历操作文档的AST节点来实现

  // 构建子集Schema的AST并打印成SDL格式
  const subsetSchemaAST = // 基于收集的usedTypes构建AST
  console.log(print(subsetSchemaAST));
}

extractSubsetSchema();

使用建议

  • 将子集Schema的提取步骤集成到你的CI/CD流程中,每次代码变更自动更新子集Schema,这样就能持续跟踪业务对Schema的使用变化。
  • 生成子集Schema后,搭配@graphql-tools/mock可以快速搭建只包含必要字段的Mock服务,完美支持微服务的隔离测试,避免不必要的Mock数据干扰。

内容的提问来源于stack exchange,提问作者bsmedberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:14:37