GraphQL 类型系统

17 Mar 2025 | 4 分钟阅读

GraphQL 是一种强类型语言。如果每种数据类型(例如整数、字符、十六进制、打包十进制等)都在该语言中预定义,并且为程序定义的所有常量或变量都用其中一种数据类型描述,则该编程语言被称为强类型编程语言。

GraphQL 类型系统用于描述 GraphQL 服务器的潜力。它用于确定查询是否有效。它定义了我们可以在 GraphQL 应用程序中使用的各种数据类型,以在运行时检查查询变量的输入类型并检查其有效性。

GraphQL 中主要有五种命名类型定义

索引类型说明
1.标量标量类型表示 GraphQL 类型系统中的基本数据类型,并且仅存储单个值。
2.Object它显示可以获取哪种类型的对象。
3.查询它指定到其他特定类型的入口点类型。
4.突变它用于编写查询。它指定数据操作的入口点(即创建、更新或删除数据)。
5.枚举当您需要用户从预定义的选项列表中选择时,将使用枚举类型。

标量类型

标量类型表示 GraphQL 类型系统中的基本数据类型。GraphQL 的响应形成一个分层树的形式,而 这些树上的叶子 是 GraphQL 标量。标量类型只能存储单个值。

GraphQL 提供了以下默认标量类型

Int - Int 标量类型用于表示带符号的 32 位数值非小数整数值。

Float - Float 标量类型用于表示由 IEEE 754 规定的带符号双精度浮点值。

String - String 标量类型用于表示文本数据,表示为 UTF-8 字符序列。GraphQL 主要使用它来表示自由格式的、人类可读的文本。

Boolean - Boolean 标量类型用于表示真或假。

ID - ID 标量类型表示唯一标识符,通常用于重新获取对象或用作缓存的键。

语法

以下是定义标量类型的语法

示例

对象类型

GraphQL 的响应形成一个分层树的形式,其中 这些树上的叶子是 GraphQL 标量,而 中间级别 被指定为对象。它显示可以获取哪种对象。

这是模式中最常用的类型,用于表示一组字段。它允许嵌套类型,其中对象类型中的每个字段都映射到另一种类型。因此,您可以说一个对象类型由多个标量类型或对象类型组成。

语法

以下是定义对象类型的语法

示例

上面的示例指定了一个对象数据类型 Employee。root Query 模式中的 emp_details 字段将返回一个 Employee 对象列表。

查询类型

Query 类型是从客户端发送到 GraphQL 服务器的简单请求。它用于从 GraphQL 服务器检索数据。它指定到其他特定类型的入口点类型。它是 GraphQL 中的根级别类型之一。

语法

以下是定义查询的语法

示例

Mutation 类型

Mutation 类型用于数据操作,例如创建、更新或删除数据。它是 GraphQL 中根级别的数据类型之一,它指定数据操作的入口点。

语法

以下是定义 Mutation 类型的语法

示例

如果要将新 Employee 添加到预定义的对象类型 "Employee",则必须定义一个 mutation 类型

枚举类型

GraphQL 枚举类型与标量类型相似,并且也表示 GraphQL 类型系统中的叶子值。当您需要用户从预定义的选项列表中选择时,将使用枚举类型。

语法

以下是定义枚举类型的语法

示例

查看如何定义枚举类型

列表类型

GraphQL 列表类型是一种特殊的集合类型,用于指定 List 中的每个项目。它是特定类型的值数组的表示形式。列表值根据其项目类型序列化为有序列表。列表类型与类型修饰符 [] 一起使用,该修饰符包装对象类型、标量和枚举。

语法

以下是定义列表类型的语法 -

示例

名为 "todo" 的列表类型的示例

不可为空类型

默认情况下,所有 GraphQL 类型都是可为空的,并且设置为 null,因为 null 值是所有 GraphQL 类型的有效响应。GraphQL 类型可以返回指定类型的值,也可以没有任何值。

必须使用感叹号 (!) 定义一个字段来定义不可为空类型。此感叹号用于指定使用 Non-Null 类型的字段,例如 name: String!。

语法

以下是定义不可为空字段的语法

示例


下一主题GraphQL 解析器