GraphQL是一种强类型语言. Type System定义可在GraphQL应用程序中使用的各种数据类型.类型系统有助于定义模式,这是客户端和服务器之间的契约.常用的GraphQL数据类型如下 :
Sr.No. | Types&说明 |
---|---|
1 | 标量 存储单个值 |
2 | 对象 显示可以获取的对象类型 |
3 | 查询 其他特定类型的入口点类型 |
4 | 突变 数据操作的入口点 |
5 | 枚举 在您需要用户从规定的选项列表中选择的情况下有用 |
标量类型
标量类型是只能存储单个值的原始数据类型. GraphQL提供的默认标量类型为 :
Int : 签名32位整数
Float : 有符号双精度浮点值
字符串 : UTF - 8个字符序列
布尔 : 是或否
ID : 唯一标识符,通常用作获取对象的唯一标识符或缓存的键.
定义a的语法标量类型如下 :
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.根查询模式中的 stud_details 字段将返回Student对象列表.
查询类型
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}
变异类型
变异是发送的操作到服务器创建,更新或删除数据.这些类似于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}
枚举类型
枚举类似于标量类型.在字段的值必须来自规定的选项列表的情况下,枚举非常有用.
定义枚举类型的语法是 :
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}