- GraphQL 教程
- GraphQL - 首页
- GraphQL - 简介
- GraphQL - 环境设置
- GraphQL - 架构
- GraphQL - 应用程序组件
- GraphQL - 示例
- GraphQL - 类型系统
- GraphQL - 模式
- GraphQL - 解析器
- GraphQL - 查询
- GraphQL - 变异
- GraphQL - 验证
- GraphQL - JQuery 集成
- GraphQL - React 集成
- GraphQL - Apollo 客户端
- GraphQL - 客户端认证
- GraphQL - 缓存
- GraphQL 有用资源
- GraphQL - 快速指南
- GraphQL - 有用资源
- GraphQL - 讨论
GraphQL - 类型系统
GraphQL 是一种强类型语言。类型系统定义了可以在 GraphQL 应用程序中使用的各种数据类型。类型系统有助于定义模式,模式是客户端和服务器之间的契约。常用的 GraphQL 数据类型如下:
序号 | 类型及描述 |
---|---|
1 | 标量 存储单个值 |
2 | 对象 显示可以获取哪种对象 |
3 | 查询 到其他特定类型的入口点类型 |
4 | 变异 数据操作的入口点 |
5 | 枚举 在需要用户从预设选项列表中选择时很有用 |
标量类型
标量类型是只能存储单个值的原始数据类型。GraphQL 提供的默认标量类型为:
Int - 带符号的 32 位整数
Float - 带符号的双精度浮点数
String - UTF-8 字符序列
Boolean - 真或假
ID - 唯一标识符,通常用作获取对象的唯一标识符或作为缓存的键。
定义标量类型的语法如下:
field: data_type
下面给出的代码片段定义了一个名为 greeting 的字段,该字段返回 String 值。
greeting: String
对象类型
对象类型是模式中最常用的类型,表示一组字段。对象类型中的每个字段都映射到另一种类型,从而允许嵌套类型。换句话说,对象类型由多个标量类型或对象类型组成。
定义对象类型的语法如下:
type object_type_name { field1: data_type field2:data_type .... fieldn:data_type }
您可以考虑以下代码片段:
--Define an object type-- type Student { stud_id:ID firstname: String age: Int score:Float }
--Defining a GraphQL schema-- type Query { stud_details:[Student] }
上面给出的示例定义了一个对象数据类型 Student。根 Query 模式中的 stud_details 字段将返回一个 Student 对象列表。
查询类型
GraphQL 查询用于获取数据。它就像在基于 REST 的 API 中请求资源一样。简单来说,查询类型是从客户端应用程序发送到 GraphQL 服务器的请求。GraphQL 使用模式定义语言 (SDL) 来定义查询。查询类型是 GraphQL 中众多根级类型之一。
定义查询的语法如下:
type Query { field1: data_type field2:data_type field2(param1:data_type,param2:data_type,...paramN:data_type):data_type }
定义查询的示例:
type Query { greeting: String }
变异类型
变异是发送到服务器以创建、更新或删除数据的操作。这类似于调用基于 REST 的 API 的 PUT、POST、PATCH 和 DELETE 动词。
变异是 GraphQL 中的根级数据类型之一。查询类型定义数据获取操作的入口点,而变异类型指定数据操作的入口点。
定义变异类型的语法如下:
type Mutation { field1: data_type field2(param1:data_type,param2:data_type,...paramN:data_type):data_type }
例如,我们可以定义一个变异类型来添加新的学生,如下所示:
type Mutation { addStudent(firstName: String, lastName: String): Student }
枚举类型
枚举类似于标量类型。枚举在字段的值必须来自预设选项列表的情况下很有用。
定义枚举类型的语法为:
type enum_name{ value1 value2 }
以下代码片段说明了如何定义枚举类型:
type Days_of_Week{ SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY }
列表类型
列表可用于表示特定类型的数组值。列表使用类型修饰符 [] 定义,该修饰符包装对象类型、标量和枚举。
可以使用以下语法定义列表类型:
field:[data_type]
以下示例定义了一个列表类型 todos:
type Query { todos: [String] }
非空类型
默认情况下,每个核心标量类型都可以设置为 null。换句话说,这些类型可以返回指定类型的值,也可以没有值。要覆盖此默认值并指定必须定义字段,可以将感叹号 (!) 附加到类型。这确保了查询返回的结果中存在值。
可以使用以下语法定义非空字段:
field:data_type!
在下面的示例中,stud_id 被声明为必填字段。
type Student { stud_id:ID! firstName:String lastName:String fullName:String college:College }