GraphQL 类型系统
GraphQL是一种强类型语言。Type System定义可在GraphQL应用程序中使用的各种数据类型。
类型系统有助于定义模式,这是客户端和服务器之间的契约。
常用的GraphQL数据类型如下:
序号 | 类型和描述 |
---|---|
1 |
纯量 存储单个值 |
2 |
宾语 显示可以获取的对象类型 |
3 |
询问 入口点类型为其他特定类型 |
4 |
突变 数据操作的切入点 |
5 |
枚举 在需要用户从规定的选项列表中选择的情况下非常有用 |
标量类型
标量类型是原始数据类型,只能存储单个值。GraphQL提供的默认标量类型是 -
- Int - 签名32位整数
- Float - 有符号双精度浮点值
- 字符串 - UTF - 8个字符的序列
- Boolean - True或false
- ID - 唯一标识符,通常用作获取对象的唯一标识符或缓存的键。
定义标量类型的语法如下
field: data_type
下面给出的片段定义了一个名为greeting的字段,它返回String值。
greeting: String
1. 对象类型
对象类型是模式中使用的最常见类型,表示一组字段。对象类型中的每个字段都映射到另一个类型,从而允许嵌套类型。换句话说,对象类型由多个标量类型或对象类型组成。
定义对象类型的语法如下 -
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。根查询模式中的stud_details字段将返回Student对象的列表。
2. 查询类型
GraphQL查询用于获取数据。这就像在基于REST的API中请求资源一样。为了简单起见,Query类型是从客户端应用程序发送到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
}
3. 突变类型
变异是发送到服务器以创建,更新或删除数据的操作。这些类似于PUT,POST,PATCH和DELETE动词来调用基于REST的API。
Mutation是GraphQL中的根级数据类型之一。Query类型定义数据获取操作的入口点,而Mutation类型指定数据操作操作的入口点。
定义Mutation类型的语法如下
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
}
4. 枚举类型
Enum类似于标量类型。在字段的值必须来自指定的选项列表的情况下,枚举非常有用。
定义枚举类型的语法是
type enum_name{
value1
value2
}
以下代码段说明了如何定义枚举类型
type Days_of_Week{
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
}
5. 清单类型
列表可用于表示特定类型的值数组。列表使用包含对象类型,标量和枚举的类型修饰符[]定义。
以下语法可用于定义列表类型
field:[data_type]
下面的示例定义了一个列表类型待办事项
type Query {
todos: [String]
}
6. 非可空类型
默认情况下,每个核心标量类型都可以设置为null。换句话说,这些类型可以返回指定类型的值,也可以没有值。要覆盖此默认值并指定必须定义字段,可以将感叹号(!)附加到类型。这可确保查询返回的结果中存在值。
以下语法可用于定义不可为空的字段
field:data_type!
在下面的示例中,stud_id被声明为必填字段。
type Student {
stud_id:ID!
firstName:String
lastName:String
fullName:String
college:College
}
GraphQL架构是任何GraphQL服务器实现的核心。它描述了连接到它的客户端应用程序可用的功能。我们可以使用任何编程语言来创建GraphQL架构并围绕它构建一个接口。GraphQL运行时定义了一个通用的基于图形的模 ...