DiagramPreview
2026-06-1615 分钟阅读

Schema 预览工作流:JSON Schema、Zod、TypeScript、GraphQL 与 Protobuf

围绕 API 契约、运行时校验、TypeScript 类型、表单预览、GraphQL SDL 和 Protobuf schema,建立发布前 schema review 流程。

Schema 预览工作流:JSON Schema、Zod、TypeScript、GraphQL 与 Protobuf
01

Schema 问题的本质是多个事实来源不一致

后端可能维护 JSON Schema,前端使用 TypeScript,运行时校验写在 Zod,GraphQL 或 Protobuf 又承担另一套契约。只看其中一个文件,很容易漏掉 required、nullable、enum、default 和嵌套结构变化。

支柱文章的目标不是解释每种格式的语法,而是帮助读者建立一条能复用的 schema review 路径:先看类型意图,再看运行时行为,最后看契约和表单呈现。

Schema 预览工作流:TypeScript、Zod、JSON Schema、GraphQL 和 Protobuf
有价值的 schema 文档应该同时回答开发者、运行时校验、API 契约和表单体验的问题。
02

用 TypeScript 先看字段层级和开发者意图

TypeScript interface 最适合让前端、SDK 和文档读者快速理解字段层级。它能表达可选字段、联合类型和嵌套模型,但不能证明运行时真的会校验。

如果一个字段在 TypeScript 里是可选,在 JSON Schema 里却是 required,就应该在文章里明确标为破坏性风险。

ts可复制 Demo
export interface UserProfile {
  id: string;
  email: string;
  role?: "admin" | "viewer";
  settings: {
    theme: "light" | "dark";
    weeklyDigest: boolean;
  };
}
TypeScript 预览适合先检查命名、层级和 optional 字段。
03

用 Zod 检查真实输入会在哪里失败

Zod 关注运行时行为:email 校验、默认值、transform、refine、自定义错误消息都在这一层。很多线上问题不是类型写错,而是用户输入到了类型系统看不到的边界。

文章里可以把 Zod 预览作为“从文档到运行时”的桥,提醒读者检查错误消息和默认值是否同步到 API 示例。

ts可复制 Demo
const UserProfileSchema = z.object({
  id: z.string().uuid(),
  email: z.string().email(),
  role: z.enum(["admin", "viewer"]).default("viewer"),
  settings: z.object({
    theme: z.enum(["light", "dark"]),
    weeklyDigest: z.boolean()
  })
});
Zod 可视化要重点看 default、enum、refine 和错误消息。
04

用 JSON Schema 和表单预览检查契约是否能被消费

JSON Schema 更适合跨语言共享,也常被用于表单生成、API 文档和校验器。可视化时要重点看 required、nullable、array items、additionalProperties、oneOf/anyOf。

如果 schema 能生成表单,还应该检查字段顺序、描述、枚举文案和非法 payload 的错误反馈。搜索“JSON Schema 表单预览”的用户通常关心这个。

json可复制 Demo
{
  "type": "object",
  "required": ["id", "email", "settings"],
  "properties": {
    "email": {"type": "string", "format": "email"},
    "role": {"type": "string", "enum": ["admin", "viewer"]},
    "settings": {"type": "object"}
  }
}
JSON Schema 可视化适合发现 required、enum 和嵌套对象的变更。
05

GraphQL 和 Protobuf 要特别关注兼容性

GraphQL 里 nullable 到 non-null、删除 enum 值、修改参数都可能影响客户端。Protobuf 里字段编号、reserved、repeated、message 引用和 service request/response 才是 review 重点。

这类文章不要承诺“可视化能证明兼容”,更准确的说法是:可视化能把高风险变更暴露出来,最终仍要结合各自协议的兼容规则。

graphql可复制 Demo
type Query {
  user(id: ID!): User
}

type User {
  id: ID!
  email: String!
  role: Role
}

enum Role { ADMIN VIEWER }
GraphQL schema 预览适合从 Query/Mutation 入口一路追到 type、input 和 enum。
06

Schema review checklist 和内链建议

发布前至少检查 required、nullable、enum、default、array item、additionalProperties、oneOf/anyOf、错误消息和表单字段顺序。再准备一个合法 payload 和一个非法 payload。

内链上建议把 JSON Schema Visualizer、Zod Schema Visualizer、TypeScript Interface Visualizer、JSON Schema Form Preview、GraphQL Schema Visualizer 和 Protobuf Schema Visualizer 都连接到这篇支柱文章。