如何使用GraphQL操作名称和变量

图表操作名称和变量

这是一个免费的博客文章,视频来自ShopifyDevs YouTube频道。在本文中,Shopify Plus的发布工程师Chuck Kosman将带您了解GraphQL的一些关键特性,这些特性对于大规模构建应用程序非常方便。这是由五部分组成的系列教程中的第一部分,该系列教程旨在教育和提高您对GraphQL优点的认识。

在本教程中,Chuck将探索GraphQL操作名称和变量。

注意:本文中的所有图像都超链接到YouTube视频的相关时间戳,因此您可以单击它们以获取更多信息。

使用GraphQL创建一个基本查询

这里我使用的是图形化IDE。这是一个应用程序安装在一个开发商店,我有一些产品,客户和订单填充。如果这些听起来像行话,看看我们的开始使用GrapOB欧宝娱乐APPhQL在Shopify开发人员系列中的文章开始设置。OB欧宝娱乐APP

图ql操作名称和变量:定义查询的后端图像

这是一个非常简单的产品查询。我所做的就是按其检索产品ID,我提供那个GraphQLIDID论点。这样就行了,我按一下这里,我应该把这些数据拿回来。

Graphql操作名称和变量:gif视频编码查询

虽然它是可行的,但还不能大规模使用。你必须把这个查询传递进去,当我做一个HTTP请求。这意味着如果你想改变IDS,你每次都要用字符串插值来组合查询。

虽然这是可以的,但它不是理想的,而且它也没有真正利用GraphQL的类型系统。

在GraphQL中定义名称

我们可以在查询主体的开头添加一些东西,以使其更具可重用性。这些都是操作名和变量。请记住,这是一个隐式查询,因为我省略了query关键字。不过,我需要为下一个操作提供query关键字。

你可能还喜欢:开始使用GrapOB欧宝娱乐APPhQL

我可以通过在查询关键字后输入操作名称来为操作命名。对于突变我也可以这样做。如果这里说突变然后我有一个空间,我可以这样做。约定是PascalCase,描述返回的是什么。

我要说ProductTitleAndDescription。当我再次运行此程序时,您将看到实际上没有任何变化,但是我们可以自由地添加操作名称。

图表操作名称和变量:说话者命名查询的GIF

用GraphQL定义变量

下一部分是变量。变量的语法是这样的:

图表操作名称和变量:定义变量的视频截图

我要在操作名后面开括号,假设我要提供一个变量ID。的符号表示这是一个变量。我要用a然后我要说这个变量的类型是ID。变量的重要性在于,您实际上必须指定类型。

我们将稍微改变一下这个查询。我要把这个复制到我的剪贴板上,我会说ID我提供给这个产品领域的是ID变量。

图表操作名称和变量:说话者定义变量的GIF

现在,我还没有提供一个变量。当我点击播放时,它会说,嘿,我们期待你提供类型ID这个ID变量。你没有提供一个有效值,实际上你什么都没提供。

这就是查询变量窗格在以下情况下使用的地方HTTP客户端或图形化应用程序,实际提供变量的语法是这样的:

graphql操作名称和变量:定义ID变量的视频截图

我将打开一组花括号,然后我要说ID值,注意这里,它实际上选择了,我试图提供anID类型变量ID根据我设置查询的方式,它已经知道了。

我要复制粘贴一下ID我之前抓过的,我来查一下IDE在后台所做的是将值替换为ID变量,而不必自己做任何字符串插值。

" IDE在后台所做的是将值替换到ID变量,而无需自己做任何字符串插值。”

图形操作名称和变量:从视频中定义一个变量

GraphQL语言的实际特性允许我这样做。这并不能很好地描述,因为我们在IDE中工作,但我们可以在一个非常简单的客户端应用程序中看到它是什么样子。

我们将翻到Visual Studio Code看看这些在多大程度上会派上用场。

在应用程序中使用名称和变量

在Visual Studio Code中,我使用客户端库构建了一个非常简单的应用程序graphql-request。这是使用node发出GraphQL请求的一种非常轻量级的方式。从本质上讲,这几行代码只是为了让这个应用程序在节点环境(而不是浏览器环境)中协作。

graphql操作名称和变量:从VS Code的视频截图

注意,我也使用dotenv这样当我真正发出这个请求时,我就不会在屏幕上把我的私人应用密码暴露给你了,亲爱的读者。我所做的就是对发出请求的端点进行硬编码。

https://getting-OB欧宝娱乐APPstarter-with-graphql.myshopify.com/admin/api/2020-20/graphql.json恰好是我正在使用的测试存储的地址。我是实例化graphQLClient并提供必要的头文件,即application / JSON然后是属于我私人应用程序的实际密码,process.env.API_PASSWORD

当您使用GraphQL和应用程序时,您经常会看到以这种方式定义的查询,其中您正在使用的客户端通常具有标记的模板文字函数,其中您传递的字符串是您的请求,无论它是查询还是突变。

graphql操作名称和变量:VS Code中的变量语法

您将看到我正在使用变量语法。我说我要提供anID类型的ID然后我将把它提供给论证ID。有许多不同的用法ID,但它们都有各自独特的用途。

接下来,我要做的是定义我要传入的变量。就像在graphhiql的查询变量窗格中一样,我指定了一个key对象ID然后对应于乘积的实际字符串ID。我根据GraphQL请求包中定义的方法发出请求,并提供查询和定义的变量。

graphql操作名称和变量:在VS Code中大规模开发

我不需要自己做字符串插值,我只需要控制台记录结果。我将运行这个脚本,然后得到我期望的数据。

现在,变量就派上用场了。

我还有其他变量要找,在这里我发行了不同的产品ID。我将以完全相同的方式发出请求。我要说发出相同的查询,但是提供otherVariables我已经定义过了。不是这个乘积,而是这个乘积,然后是console log。我也要运行一下。

图形操作名称和变量:来自视频的GIF

现在两者都得到了。

这就是变量的重要性。我不需要自己做任何字符串插值,GraphQL已经内置了。现在,这个查询是未命名的。它没有使用任何操作名。如果我把这个注释掉,假设我要发出一个请求。假设我引入了一个语法错误,我忘记了一个大括号。如果我再次运行这个脚本,在我保存它之后,它会对我大喊,“嘿,你做得不对。”

这就是变量的重要性。我不需要自己做任何字符串插值,这已经内置在GraphQL中。”

有趣的是,我直接看到的是查询本身,而没有命名这个操作,这对我来说真的很难完成。

这是一个非常简单的应用,它只发出一个请求。您可以想象,在规模上,您希望查看请求是否失败。你会想知道它是哪个请求。我不想遍历整个应用程序并找出这个结构的查询在哪里。我希望我的日志能够根据一个操作名称计算出来。

你可能还喜欢:Shopify GraphQL学习工具包

GraphQL操作:为大规模调试命名

我可以任意地引入一个操作名。假设ProductIdAndTitle因为这是我在这个查询中得到的信息。在不修复语法错误的情况下,我将清除并再次运行它。

图形化操作名称和变量:从命名调试视频的规模部分的礼物

现在,当它失败时,至少我在日志中有操作名称。这就是操作名称的重要性所在。这实际上有点类似于匿名函数和命名函数之间的区别。

在匿名函数中,它们是没有名称的函数,因此在堆栈跟踪中很难确定错误发生的位置。这就是为什么要给函数命名的建议;在堆栈跟踪中,它表示这个名称的函数失败。这与这里的原则完全相同,因为您不必命名查询或突变,但这对于大规模调试非常有用。

请继续关注本教程的第2部分,在第2部分中,我们将介绍大规模工作的另一个特性:别名。

借助Shopify合作伙伴计划发展您的业务

了解更多