GraphQL 是一种用于 API 的查询语言,它允许客户端指定需要的数据,而不是像 REST API 那样返回完整的数据集。在 GraphQL 中,变量是一种非常重要的概念,它可以让我们在查询中动态地传递参数,以便更好地控制数据的获取和处理。本文将介绍在 GraphQL 查询中使用变量的技巧和注意事项,帮助读者更好地掌握 GraphQL 的使用。
GraphQL 变量的基本用法
在 GraphQL 中,变量使用 $
符号开头,后面跟着变量名和类型,例如:
query ($id: Int!) { user(id: $id) { id name email } }
在这个查询中,我们定义了一个名为 $id
的变量,类型为 Int!
,表示一个非空的整数。然后我们在查询中使用了这个变量,通过 user(id: $id)
来获取指定 id
的用户信息。我们可以在执行查询时动态地传递 $id
变量的值,例如:
{ "id": 123 }
这样就可以得到 id
为 123 的用户信息。
GraphQL 变量的类型
GraphQL 变量有多种类型,包括标量类型、枚举类型、输入对象类型等。在定义变量时,需要指定变量的类型,以便在运行时进行类型验证和转换。例如:
query ($id: ID!, $name: String!, $status: UserStatus!) { user(id: $id, name: $name, status: $status) { id name email } }
在这个查询中,我们定义了三个变量,分别为 id
、name
和 status
,它们的类型分别为 ID!
、String!
和 UserStatus!
。其中 ID
和 String
是标量类型,UserStatus
是一个枚举类型,它定义了用户的状态,例如:
enum UserStatus { ACTIVE INACTIVE BLOCKED }
在执行查询时,我们需要传递符合类型要求的变量值,例如:
{ "id": "123", "name": "John", "status": "ACTIVE" }
注意,这里的 id
是一个 ID
类型,但我们传递的是一个字符串,GraphQL 会自动将其转换为 ID
类型,如果类型不匹配,则会返回错误。
GraphQL 变量的默认值
在定义变量时,我们可以为其设置默认值,以便在执行查询时,如果没有传递变量值,则使用默认值。例如:
query ($id: ID = "123", $name: String = "John", $status: UserStatus = ACTIVE) { user(id: $id, name: $name, status: $status) { id name email } }
在这个查询中,我们为 id
、name
和 status
三个变量设置了默认值,如果在执行查询时没有传递这些变量的值,则会使用默认值。例如:
{ "status": "ACTIVE" }
在这个请求中,我们只传递了 status
变量的值,其他两个变量使用了默认值,这样就可以得到 status
为 ACTIVE
的用户信息。
GraphQL 变量的注意事项
在使用 GraphQL 变量时,需要注意以下几点:
- 变量名必须以
$
符号开头。 - 变量名不能重复。
- 变量名不能与查询中的字段名相同。
- 变量的类型必须与定义时一致。
- 如果变量类型为非空类型,则必须传递变量值。
- 如果变量类型为可空类型,则可以不传递变量值,或者传递
null
。
示例代码
下面是一个完整的 GraphQL 查询示例,使用了变量、默认值和枚举类型:
-- -------------------- ---- ------- ----- ------------ ---- -------- ---------- - ------- - -------- ---- ------- -------- - -- ---- ----- - - ---- ---------- - ------ -------- ------- -
在执行查询时,我们可以传递如下变量值:
{ "id": "123", "status": "ACTIVE" }
这样就可以获取 id
为 123
的 ACTIVE
状态的用户信息。
结论
本文介绍了在 GraphQL 查询中使用变量的基本用法、类型、默认值和注意事项,通过示例代码帮助读者更好地掌握 GraphQL 的使用。使用变量可以让我们更灵活地控制数据的获取和处理,是 GraphQL 查询的重要功能之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6726f1512e7021665e1bc2a1