Shopify Admin API 中使用 GraphQL 的基础知识
适用于希望掌握 GraphQL 数据查询与写入操作的开发人员
本文介绍在 Shopify Admin API 中如何使用 GraphQL 查询和修改存储数据,主要通过 GraphiQL 工具进行演示,并提供 curl 和 Postman 等客户端实现方法。
GraphiQL 可用于以下数据项的读写:
- analytics
- apps
- channels
- checkouts
- customers
- discounts
- markets
- products
- themes
- shipping
学习重点包括:
- 如何使用基本的 GraphQL 数据查询
- 如何使用 GraphQL 的数据写入功能
- 如何利用变量进行查询
- 如何使用 GraphiQL、curl 和 Postman 实现数据查询与写入
完成本文实践需准备以下环境:
- 一个 Shopify Partner 帐户
- 一个带有演示产品的开发商店
安装 GraphiQL
GraphiQL 是由 GraphQL 基金会推出的开源 Web 工具,支持自动补全并执行 GraphQL 查询。Shopify 提供了专为管理员 API 定制的应用版本,可直接安装至 Shopify 商店中,具备内置身份验证功能,简化测试流程。
建议将应用固定到导航菜单以方便后续访问。
生成第一个查询
以下是针对 Shopify 管理员 API 运行的第一个 GraphQL 查询示例:
query {
shop {
name
}
}
GraphQL 要求指定返回字段,在本例中我们仅获取了 name 字段。
要运行查询,请点击 GraphiQL 左上角的“播放”按钮,结果将显示为 JSON 格式。
你可以扩展查询以获取更多信息,例如:
query {
shop {
name
contactEmail
url
}
}
提示:使用 CTRL+Space 键盘快捷键查看可用字段列表。
扩展查询
GraphQL 支持从链接对象中获取深度嵌套的数据,显著降低 REST API 所需的多次调用次数。
查询产品列表
以查询产品为例,需要注意 products 返回的是 ProductConnection 类型而非普通对象列表,该类型封装了额外的分页逻辑。
示例:
query {
products(first: 5) {
edges {
node {
id
title
}
}
}
}
查询参数
你还可以结合参数筛选数据:
query {
products(first: 5, query: "product_type:top") {
edges {
node {
id
title
}
}
}
}
以上示例返回最多 5 个类型为 top 的产品。
命名查询与变量
为便于调试,可以定义带变量的命名查询,例如:
query topProducts($numberOfProducts: Int!, $queryParams: String) {
products(first: $numberOfProducts, query: $queryParams) {
edges {
node {
id
title
}
}
}
}
在 GraphiQL 中通过“查询变量”面板赋值。
为产品创建元字段
GraphQL 也支持数据写入操作,以下是一个向产品添加 Metafield 的示例:
mutation {
productUpdate(input: {id: "gid://shopify/Product/123456", metafields: [{namespace: "custom", key: "size", value: "large", valueType: STRING}]) {
product {
metafields(first: 10) {
edges {
node {
namespace
key
value
}
}
}
}
}
}
使用 curl
可以通过命令行工具(如 curl)执行 GraphQL 操作,如下为示例模板:
curl -X POST \
https://{your_store_name}.myshopify.com/admin/api/{latest_api_version}/graphql.json \
-H 'Content-Type: application/graphql' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "{ shop { name } }"
}'
使用 Postman
在 Postman 中设置请求时,请添加以下头部:
Content-Type: application/json
X-Shopify-Access-Token: [your_access_token]
在请求体中选择 “GraphQL” 并粘贴你的查询语句。

