所有文章 > API设计 > 如何调用 GraphQL Admin API 查询非Rest API 可以查询到的数据

如何调用 GraphQL Admin API 查询非Rest API 可以查询到的数据

这篇文章适用于希望了解如何在 Shopify Admin API 上下文中使用 GraphQL 的基础知识的开发人员。介绍对 GraphQL API 的 API 调用的结构,然后演示如何访问和修改存储中的数据。

将主要使用 GraphiQL 来执行我们的调用,但我们也将展示如何在 Postman 或 curl 等客户端中执行调用的示例。

GraphiQL 可以对以下列表项中的数据进行读取和写入,看下面的菜单有没有熟悉的感觉:

  • analytics
  • apps
  • channels
  • checkouts
  • customers
  • discounts
  • markets
  • products
  • themes
  • shipping

这篇文章主要学习了解如下4点:

  1. 如何使用基本的 GraphQL 数据查询
  2. 如何使用 GraphQL 的数据写入
  3. 如何使用变量查询
  4. 如何使用 Graphiql、curl 和 Postman 查询和写入

你需要有如下2个必要条件,目前这两个条件都是免费的:

  • 一个 Shopify Partner 帐户
  • 一个带有演示产品的开发商店

安装 GraphiQL

GraphiQL 是 GraphQL 基金会下的一个开源项目。它是一个基于 Web 的工具,允许您编写具有自动完成的 GraphQL 查询,然后针对生产 API 执行这些查询。

Shopify 提供了一个打包为应用程序的 GraphiQL 版本,可以安装到 Shopify 商店。此版本具有内置的帮助程序,用于向 Shopify 管理员 API 进行身份验证,因此无需任何复杂的设置即可轻松测试对实时数据的查询。

通过输入测试商店的名称来选择应用的安装位置。

如果你按照我们的建议使用开发人员商店,请随意选择任意数量的范围,以便你可以尝试本研讨会中未涵盖的其他查询和变更。至少,请确保选择要读取和写入产品的范围。

安装该应用程序后,您会看到它嵌入在你的商店管理仪表板中。

请考虑将应用固定到导航菜单,以便以后轻松访问。

生成第一个查询

这里对 Shopify 管理员 API 运行查询作为例子。

需要对确保在 GraphiQL 顶部选择了 API 架构以及 Admin (Latest) API 版本。

选择架构后,我们可以查询商店的名称。在 GraphiQL 的左侧输入以下查询,确保覆盖可能已经存在的任何内容。

示例中,第一个术语定义了我们要调用的特定查询 – shop 。GraphQL 和 REST 之间的主要区别之一是 GraphQL 要求您指定要检索的确切字段。在本例中,Shop 对象包含许多字段,我们只指定了要返回的 name 字段。

要运行查询,请按 GraphiQL 左上角的大三角形“播放”按钮。

在右侧看到一个带有您商店名称的JSON对象。响应将始终是一个 JSON 对象,可以在属性中找到特定于响应的数据。

可以通过在同一查询中的新行上指定所需的字段来返回更多数据。例如,我们还可以查询 contactEmail and url 我们的商店。你会发现,边输入查询字段时,右侧会自动返回查询的数据。

使用 GraphiQL 时,您可以使用 CTRL+Space 查看所有可用字段。除了有关 Shopify.dev 的文档外,您还可以使用屏幕右侧的文档资源管理器查看更多信息。

扩展查询

目前,我们的查询仅返回我们查询的基 Shop 对象上的字段,这类似于与数据库中的特定对象或者叫相关的 REST 表。但是,在 GraphQL API 中,我们通常有许多对象是链接的,可以一起查询。

查询通常与从各种连接的对象类型中读取的字段深度嵌套在一起。构建检索复杂数据结构的查询的能力是 GraphQL 的强大功能。

如果我们使用 REST API,我们将需要执行许多 API 调用来检索所有连接的数据,但是在 GraphQL 中,我们只需一次即可完成。

查询列表产品

现在我们已经介绍了如何查询嵌套对象,然后尝试查询对象列表。以使用 products 查询为例,但如果以按 shop 的写法去写 product ,会报错,是因为 products 查询返回结果 ProductConnection ,而不仅仅是我们预期的 Product 对象列表。

必须要更正为这样的写法才会返回正确的数据:

GraphQL 中,一个 Connection (就像从查询中返回的 products 那个一样)是一个特殊的包装器,它允许我们以安全的方式查询对象列表。

它 Connection 提供了额外的逻辑,允许在限制范围内的查询数量,之后才会返回数据。例如,我们可以将查询限制为前五个结果,然后我们可以对接下来的五个结果执行另一个查询,依此类推。这是一种基于“分页”的查询。

你需要知道,在 GraphQL 查询中使用 时 Connection ,是不会返回对象列表的,而是会返回一个“多个对象或多个表共同的”查询列表。用过 node.js 的对这种查询应该不会陌生。

查询参数

在查询时,我们可以在调用中包含一个 query 参数 products.

这样的查询将会返回 product_type 为 top 的数据。

上面的例子中同时包含了limit 和 query 参数,因此它最多会返回 5 个项目.

命名查询是使用比较多的查询方式,因为这种查询允许我们创建查询变量,并且还可以更轻松地调试。

将上面的例子,重写为一个命名查询。使其具有一个名称,并接受两个查询变量。

首先将查询的名称命名为 topProducts ,并引入两个变量: numberOfProducts 和 queryParams

你会发现这很像是一个函数,可以传递变量。

当指定参数时,我们需要包含数据类型。

在这个例子中, 参数数据有两个类型String 和Int! numberOfProducts 的参数是必需的,而 queryParams 缺少是可选的。

我们需要做的最后一件事就是给我们的变量赋值。

在 GraphiQL 中,我们通过打开左下角折叠的“查询变量”窗格来执行此操作。

最后,通过再次运行查询并获得相同的结果来检查所有内容是否正确设置。

这是查询文档:https://shopify.dev/docs/api/usage/search-syntax

为产品创建元字段

除了读取数据以外,GraphQL 的另一个主要操作是:数据写入。

下面这个例子将使用 productUpdate 向产品添加一个新 Metafield 带有元字段的产品。

ProductInput 为 的输入变量。这个对象需要一种方法来识别您要更新的产品以及您希望更改的特定信息。

通常,将元字段返回是可以验证是否添加成功这个元字段的最好办法。

使用 curl

GraphQL 查询和写入也可以使用 curl 等工具通过命令行执行。因此,我们需要使用身份验证令牌来验证对开发存储的调用。

在APP插件后台,单击“应用程序”菜单,然后单击“应用程序和销售渠道设置”来设置一个新的开发APP。

然后创建一个APP用于开发。

创建应用后,转到“配置”菜单并根据需要添加任意数量的访问范围,但请确保至少选中你想要开发的那个项目的 write_products 并 read_products

然后获取到所有的API 开发凭据,然后使用  curl、Postman 等工具或用代码调用时进行身份验证。

请记住,只能通过 Shopify 后台查看此令牌一次,因此请务必将其保存在安全的地方。确保永远不要与任何人共享此 API 访问令牌,因为它可以用于修改商店的数据。

使用下面的模板,将占位符值( {your_store_name} 、 {latest_api_version} 和 {access_token} ) 替换为你刚创建的APP的相应的值。

如果你的查询带有参数,可以按下面的这个模板:

使用 Postman

Postman 是一个第三方工具,允许调用 GraphQL API。它对于查询和数据写入非常有用,而不需登录我们一直在使用的 GraphiQL 应用程序。

打开请求的标头部分,然后输入以下键/值对,将占位符值替换为您在 Shopify 后台中显示的 API 密钥:

最后,打开请求的“body”部分,然后选择“GraphQL”单选按钮。

将我们之前运行的那几种查询复制并粘贴到查询窗口中,可以在 GraphQL Variables 窗口中包含任何变量。然后点击右上角的发送!

内容比较多,各种截图。

文章转自微信公众号@Shopify 主题开发

#你可能也喜欢这些API文章!