GraphQL 是一种用于 API 的查询语言。它允许客户端应用程序精确地指定它们所需的数据,并且能够减少数据传输的量。此外,GraphQL 还支持使用变量。接下来,我们将详细探讨 GraphQL 变量是什么,以及它们如何在标量和对象之间进行转换。
什么是 GraphQL 变量?
GraphQL 变量用于在查询中传递参数,从而减少代码中出现的硬编码常量。这些常量可以是字符串、数值、枚举值或对象。变量使用 $
符号进行声明,并且在进行查询时会在变量声明中传递。
下面是一个简单的查询和变量声明的示例:
query userProfile($userId: ID!) { user(id: $userId) { name email } }
在这个查询中,我们声明了一个名为 userProfile
的查询,变量名为 userId
,类型为 ID
。!
表示这是一个必需变量,不能忽略。在查询执行时,我们会将实际的值传递给变量,并最终返回用户的名称和电子邮件。
标量和对象之间的变量转换
GraphQL 变量可以用于在标量和对象之间进行转换。这对于定义嵌套的输入类型和查询参数非常有用。
接下来,我们将看一下在标量和对象之间进行转换的示例。
将标量转换为对象变量
假设我们有一个数据模型,其包含两个对象类型:用户和文章。我们要创建一个新的文章,并将它分配给特定用户。下面是一个用于创建文章的标量变量的查询示例:
-- -------------------- ---- ------- -------- --------------------- -------- --------- -------- -------- -------- - -------------------- - ------ ------- -------- --------- ------- ------- -- - ----- ---- - ---- ----- - - -展开代码
在这个查询中,我们使用三个字符串类型的变量 title
、content
和 userId
。但是,我们还需要将文章分配给特定的用户。为了做到这一点,我们需要将 userId
转换为一个 UserInput 类型的对象变量。UserInput 类型由 name 和 email 字段组成,因此可以在前端应用程序中轻松构建。
下面是一个使用对象变量的示例:
-- -------------------- ---- ------- -------- --------------------- -------- --------- -------- ------ ----------- - -------------------- - ------ ------- -------- --------- ----- ----- -- - ----- ---- - ---- ----- - - -展开代码
我们将 userId
变量转换为 user
对象变量。现在,$user
变量需要一个包含 two 字段的对象,这两个字段是我们在 UserInput 类型中定义的字段。这使得我们更容易将 用户信息 嵌入到我们的查询中。
将对象转换为标量变量
我们也可以将嵌套对象转换为标量变量。假设我们要按用户名筛选文章,我们可以编写以下查询:
-- -------------------- ---- ------- ----- - ---------------- - ----- - ----- ----- ---- - -- - ----- ---- - ---- - - -展开代码
但是,将这个查询的用户对象转换为标量变量会更好。为此,我们需要将参数对象提取出来,并将其转换为我们现有的变量。
下面是对象变量和标量变量之间的转换示例:
-- -------------------- ---- ------- ----- ----------- -------- - ---------------- - ----- - ----- --------- - -- - ----- ---- - ---- - - -展开代码
在这个查询中,我们将 user
对象转换为一个字符串类型的 userName
变量。现在,我们可以使用 $userName
在查询中动态地筛选文章。
结束语
GraphQL 变量是一个非常强大的特性。使用变量,我们可以轻松传递参数,减少硬编码常量的使用,并在标量和对象之间进行转换。在实际应用程序中,这些操作都是必需的。希望本文能够帮助你更好地理解 GraphQL 变量,并使用它们来构建更强大的查询。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67865c8b4083a4caeef0f22e