GraphQL 是一种用于 API 构建的查询语言,它具有强类型、可组合、可描述性等特点。而定义数据模型及类型,便是 GraphQL 架构设计的基础。
GraphQL Schema Language 是用于定义 GraphQL 查询的语言,类似于 JSON,不过更加强大。由于 GraphQL 是基于强类型的,为了确定 API 返回数据格式,我们需要定义一个“模板”。
接下来,我们将详细介绍使用 GraphQL Schema Language 来定义数据模型及类型的方式,包括定义 GraphQL Object Type、GraphQL Interface Type、GraphQL Union Type、GraphQL Enumeration Type、GraphQL Scalar Type 和 GraphQL Input Object Type 等类型。
定义 GraphQL Object Type
GraphQL Object Type 是用于定义 API 返回的对象。一个 GraphQL Object Type 可以有多个字段,每个字段有其对应的名称、类型和描述等元数据。
以下是使用 GraphQL Schema Language 定义一个 GraphQL Object Type 的例子:
type User { id: ID! name: String! email: String! }
上面定义了一个名为 User 的 GraphQL Object Type,它有三个字段 id、name 和 email,它们分别是 ID、String 和 String 类型。其中 !
表示该字段不能为空。
定义 GraphQL Interface Type
GraphQL Interface Type 可以用于定义多个 GraphQL Object Type 的公共字段。用于定义一组字段,而不是直接定义单个 Object Type。当 Object Type 需要遵从该接口时,需要实现该接口的所有字段。
以下是使用 GraphQL Schema Language 定义一个 GraphQL Interface Type 的例子:
interface Node { id: ID! }
上面定义了一个名为 Node 的 GraphQL Interface Type,它有一个字段 id,它是 ID 类型。所有实现 Node 接口的 Object Type 必须实现 id 字段。
定义 GraphQL Union Type
GraphQL Union Type 可以用于表示两个或多个 Object Type 可以作为一种相同类型处理。
以下是使用 GraphQL Schema Language 定义一个 GraphQL Union Type 的例子:
union SearchResult = User | Post
上面定义了一个名为 SearchResult 的 GraphQL Union Type,它有两个 Object Type User 和 Post。在查询时,可以同时获取这两个类型的数据,而不必单独查询多个 Query。
定义 GraphQL Enumeration Type
GraphQL Enumeration Type 可以表示策略、指令、状态等固定的预定义集合。每个枚举值都有一个关联的字符串值。
以下是使用 GraphQL Schema Language 定义一个 GraphQL Enumeration Type 的例子:
enum UserRole { ADMIN USER GUEST }
上面定义了一个名为 UserRole 的 GraphQL Enumeration Type,它有三个枚举值 ADMIN、USER 和 GUEST。
定义 GraphQL Scalar Type
GraphQL Scalar Type 可以表示基本的原始数据类型,如 String、Int、Float、Boolean、ID 等。GraphQL Schema Language 可以使用现有的 Scalar Type 或自定义 Scalars。
以下是使用 GraphQL Schema Language 定义一个 GraphQL Scalar Type 的例子:
scalar Date
上面定义了一个名为 Date 的 GraphQL Scalar Type,它可以用于表示日期数据类型。
定义 GraphQL Input Object Type
GraphQL Input Object Type 用于定义客户端向服务器请求数据时传递的对象类型。它类似于 GraphQL Object Type,但只用于输入。Input Type 内的每个字段都必须有一个类型。
以下是使用 GraphQL Schema Language 定义一个 GraphQL Input Object Type 的例子:
input UserInput { name: String! email: String! }
上面定义了一个名为 UserInput 的 GraphQL Input Object Type,它有两个字段 name 和 email,它们分别是 String!
总结
本文介绍了使用 GraphQL Schema Language 定义数据模型及类型的方式。包括了各种类型的详细解释和示例代码。使用 GraphQL Schema Language 定义数据模型及类型可以使 API 开发更加高效和可靠。在构建 GraphQL API 时需要合理地使用以上类型,以便开发出健壮的 API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a24a5eadd4f0e0ffa63873