GraphQL 是一种由 Facebook 开发的数据查询语言,它可以帮助前端开发人员更高效地获取和处理数据。GraphQL 中的查询语言和数据类型是其最基本的组成部分,本文将对它们进行详细解析。
查询语言
GraphQL 的查询语言是一种类似于 SQL 的语法,用于描述需要从服务器获取的数据。它主要由以下几个部分组成:
查询
查询是 GraphQL 中最基本的操作,用于描述需要获取的数据。查询通常由一个或多个字段组成,并可以嵌套其他查询。
例如,下面是一个获取用户信息的查询:
query { user(id: "123") { name email } }
这个查询将返回一个用户对象,其中包含名称和电子邮件字段。
变量
变量是查询中的可重用参数,可以在查询定义中指定。变量使用 $
符号作为前缀,并在查询中使用 {}
包裹。
例如,下面是一个使用变量的查询:
query ($id: ID!) { user(id: $id) { name email } }
在这个查询中,$id
是一个 ID 类型的变量,用于获取指定 ID 的用户信息。
片段
片段是一种可重用的查询块,用于减少重复代码。它们可以在查询中使用 ...
符号来引用。
例如,下面是一个使用片段的查询:
// javascriptcn.com 代码示例 query { user(id: "123") { ...userInfo } } fragment userInfo on User { name email }
在这个查询中,userInfo
是一个片段,它包含了用户的名称和电子邮件字段。
操作名称
操作名称是一种可选的查询别名,用于标识查询。如果未指定操作名称,则会使用默认名称 query
。
例如,下面是一个指定操作名称的查询:
query GetUser($id: ID!) { user(id: $id) { name email } }
在这个查询中,操作名称为 GetUser
。
数据类型
GraphQL 中的数据类型用于描述需要获取的数据的结构和类型。它们包括标量类型、对象类型、接口类型、联合类型、枚举类型和输入类型。
标量类型
标量类型是 GraphQL 中的基本数据类型,包括字符串、数字、布尔值和 ID 等。它们表示简单的单个值,不包含任何子字段。
例如,下面是一个使用标量类型的查询:
query { user(id: "123") { name age isOnline id } }
在这个查询中,name
、age
、isOnline
和 id
都是标量类型。
对象类型
对象类型是一种复杂的数据类型,表示具有一组命名字段的对象。它们可以包含其他对象类型、标量类型或列表类型等。
例如,下面是一个使用对象类型的查询:
// javascriptcn.com 代码示例 query { user(id: "123") { name address { city state } } }
在这个查询中,address
是一个对象类型,它包含了城市和州字段。
接口类型
接口类型是一种抽象的数据类型,用于描述具有相同字段的多个对象类型。它们可以包含其他对象类型、标量类型或列表类型等。
例如,下面是一个使用接口类型的查询:
// javascriptcn.com 代码示例 query { user(id: "123") { name contactInfo { ...on EmailContactInfo { email } ...on PhoneContactInfo { phone } } } } interface ContactInfo { id: ID! } type EmailContactInfo implements ContactInfo { id: ID! email: String! } type PhoneContactInfo implements ContactInfo { id: ID! phone: String! }
在这个查询中,contactInfo
是一个接口类型,它可以是 EmailContactInfo
或 PhoneContactInfo
对象类型。
联合类型
联合类型是一种类似于接口类型的数据类型,用于描述具有不同字段的多个对象类型。它们可以包含其他对象类型、标量类型或列表类型等。
例如,下面是一个使用联合类型的查询:
// javascriptcn.com 代码示例 query { search(query: "GraphQL") { ...on User { name } ...on Post { title } } } union SearchResult = User | Post type User { name: String! } type Post { title: String! }
在这个查询中,search
返回一个 SearchResult
联合类型,它可以是 User
或 Post
对象类型。
枚举类型
枚举类型是一种有限的数据类型,用于描述具有预定义值的字段。它们可以包含字符串或数字等。
例如,下面是一个使用枚举类型的查询:
// javascriptcn.com 代码示例 query { user(id: "123") { status } } enum UserStatus { ACTIVE INACTIVE } type User { status: UserStatus! }
在这个查询中,status
是一个枚举类型,它的值必须是 ACTIVE
或 INACTIVE
。
输入类型
输入类型是一种复杂的数据类型,用于描述需要传递给服务器的参数。它们可以包含标量类型、枚举类型或其他输入类型等。
例如,下面是一个使用输入类型的查询:
// javascriptcn.com 代码示例 query ($input: UserInput!) { createUser(input: $input) { id } } input UserInput { name: String! email: String! } type User { id: ID! }
在这个查询中,UserInput
是一个输入类型,它包含了名称和电子邮件字段。
总结
GraphQL 中的查询语言和数据类型是其最基本的组成部分,它们可以帮助前端开发人员更高效地获取和处理数据。本文对查询语言和数据类型进行了详细解析,并提供了示例代码和实践指导,希望能够帮助读者更好地理解和应用 GraphQL。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657ebe88d2f5e1655d9995f9