JSON到GraphQL类型定义生成器
指导
JSON到GraphQL类型定义生成器
粘贴任何 JSON 对象或数组,即可立即获得一个描述其结构的 GraphQL 方案定义语言(SDL)文档。该生成器遍历 JSON 树,推断标量类型,为嵌套对象命名,合并数组对象变体,并生成可选的根类型,使输出可以直接用于 Apollo、Yoga、Mercurius 或 graphql-go 服务器。 Query 类型
为什么确定性的 JSON 到 GraphQL SDL 转换器很重要
从样本数据手动编写 GraphQL 类型是机械性的,但容易出错。一个遗漏的可空性、不一致 Int vs Float,或在列表元素上忘记添加非空标记,都可能导致所有下游客户端的代码生成失败。一个基于规则的生成器每次处理相同的 JSON 样本都会得到一致的结果,因此在每次 API 更新时安全地重新生成是可行的。
如何使用
- 将 JSON 对象或数组粘贴到输入框中,或点击 尝试一个示例 以加载一个代表性数据。
- 设置 根类型名称 如果您希望使用除
Root. - 选择一个 字段空值性 策略之外的其他策略——严格(
!)用于必需字段或所有可空用于原型设计。 - 切换 ID 检测 将自动提升
id且*Id键到 GraphQLID标量。 - 可选地包含一个根
Query类型,带有单实体和列表实体字段。 - 复制 SDL 或将其下载为
schema.graphql.
特征
- 标量推断 – 确定性地区分
String,Int,Float,Boolean,并且ID。 - 嵌套对象类型 – 为每个嵌套对象生成一个独立的命名类型,使用字段键的 PascalCase。
- 对象数组合并 – 将数组中每个项目的字段进行合并,因此可选字段被正确标记。
- 可空与非空切换 – 发出严格的
!标记或放宽所有内容为可空,以用于早期原型。 - 自动 ID 检测 – 将
id,userId,orderId风格的键升级为ID标量。 - 根查询骨架 – 可选的
type Query { ... }带有单实体和列表实体解析器签名。 - 客户端仅支持 – 您的 JSON 从未离开浏览器,因此该工具适用于敏感数据。
类型推断规则
- 整数映射到
Int;带有小数部分的数字映射到Float。一个字段被同时看到时,会提升到Float. - 字符串映射到
String。当启用 ID 检测时,键名为id或以Id结尾的键变为ID. - 布尔值映射到
Boolean. null,值标记字段为可空,因此生成的 SDL 会跳过尾随!.- 空数组默认为
[String],因为无法安全推断任何元素类型。 - 对象数组会合并为一个命名类型;任何元素中缺失的字段将自动变为可空。
谁在使用它
- 后端工程师将 REST 接口或 JSON 文件封装在 GraphQL 网关中。
- 前端开发者在 API 准备就绪前,使用固定数据进行模式原型设计。
- API 设计师将第三方响应形状作为类型合同进行文档化。
- 需要从稳定 JSON 样本生成可重复 SDL 艺术品的代码生成流水线。
常问问题
-
什么是 GraphQL SDL?
方案定义语言是 GraphQL 的基于文本的语法,用于描述 API 中暴露的类型、字段、查询和变更。它使用 type、scalar、enum 和 input 等关键字来声明服务器可以返回的数据形状以及客户端可以调用的操作。
-
为什么 GraphQL 使用 !(非空)标记?
在类型后添加感叹号表示该字段永远不会解析为 null。它允许客户端跳过 null 检查的防御性代码,并在必需值缺失时让服务器快速失败。如果没有它,GraphQL 会默认将每个字段视为可空。
-
何时应使用 ID 标量而不是 String?
ID 标量专用于用于重新获取或缓存对象的不可读标识符——主键、UUID、slug、外键。它被序列化为字符串,但表示身份而非显示内容,这有助于像 Apollo 和 Relay 这样的客户端正确构建其标准化缓存。
-
GraphQL 如何在 SDL 中处理对象列表?
列表使用方括号表示,例如 [Order!]!。内部的 ! 表示列表中的每个元素是非空的,外部的 ! 表示列表本身是非空的。从 JSON 样本中推断正确的元素类型需要将数组中每个项目的字段形状进行合并。
