类型化 GraphQL

Fóir 根据你的模型生成 GraphQL schema,每个模型都有类型化的查询、mutation 和输入。当你提交的类型与项目不再一致时,CLI 检查会通知你的构建。

每个模型会生成什么

每个持有记录的模型会生成一个单数查询、一个返回基于游标分页连接的复数查询、用于创建、更新和删除的 mutation,以及类型化的过滤、排序和更新输入。开启发布的模型还会得到发布和取消发布 mutation。你的字段位于记录类型的顶层,紧挨着以下划线开头的系统字段。

生产 schema 何时变化

schema 以草稿和已发布两个通道提供。编辑模型改变的是草稿,生产密钥继续使用已发布的 schema,直到某次发行版带上该变更。全新的模型或操作在创建时即发行,只新增可选字段的模型更新也是如此。发行之后,公开 schema 会在几秒内对所有使用方生效。

构建时检查

foir types 会根据项目生成 TypeScript 类型和类型化客户端的选择集。加上 --check 后它不写入任何内容,并且当已提交的文件与重新生成的结果不同时以非零状态退出。在 CI 中运行时,如果项目已变化而你提交的类型没有更新,构建就会失败。类型按 API 密钥生成,因此该密钥无法执行的操作不会出现,调用它会是编译错误。

运行时检查

生成的客户端会在服务器的 schema 自生成以来发生变化时,对每个客户端实例警告一次。对依赖某项已不再提供的内容(例如被移除的字段或参数)的类型化调用,会抛出 FoirSchemaDriftError。

类型化止于何处

在生成的类型中,排序是封闭且经过检查的类型。过滤条件被类型化为 unknown,命名空间操作的参数和结果也是如此。手写的 GraphQL 可以对照 schema 用 graphql-codegen 进行类型化,作为你自己负责的构建步骤。

了解详情

GraphQL 指南列出了为模型生成的查询、mutation 和输入,以及在哪里浏览 schema。