Skip to main content

Shopify API 概览

Shopify 提供了一套丰富的 API,让你可以读取、写入和扩展商业平台的几乎所有方面。为每项任务选择正确的 API 是 Shopify 开发中最重要的技能之一。本课提供了完整的 API 全景图,涵盖认证、版本管理、速率限制以及每个 API 的具体使用场景。

API 全景

Admin API(GraphQL 和 REST)

Admin API 是 Shopify 生态系统中最全面的 API。它提供对商店数据的完整 CRUD 访问,是你的应用进行大多数后端操作时使用的 API。

GraphQL 与 REST

Shopify 同时维护着 Admin API 的 GraphQL 和 REST 版本,但 GraphQL 是未来的主要 API。新功能会先添加到 GraphQL 中,有些功能仅在 GraphQL 中可用。

方面GraphQLREST
数据获取精确请求所需数据固定的响应结构
速率限制基于成本(1,000 点/秒)基于请求(40 请求/秒)
新功能优先添加可能滞后或永远不会添加
批量操作支持不支持
变更操作单一端点资源特定端点
学习曲线较陡较缓
优先使用 GraphQL

Shopify 已明确表示 GraphQL 是其 API 平台的未来。像 metaobjectsmarketsfulfillment orders 等新资源在 REST 中支持有限或完全没有支持。新项目应始终使用 GraphQL。

Admin API 认证

应用通过 OAuth 2.0 与 Admin API 进行认证。流程如下:

访问令牌的作用域限定于特定商店,并且仅具有商家批准的权限(作用域)。常见的作用域包括:

  • read_products / write_products -- 产品目录访问
  • read_orders / write_orders -- 订单管理
  • read_customers / write_customers -- 客户数据
  • read_inventory / write_inventory -- 库存水平
  • read_content / write_content -- Metaobjects 和内容
请求最小权限

只请求你的应用实际需要的作用域。过多的作用域请求会降低安装率——商家对要求访问所有数据的应用理所当然会持怀疑态度。你总是可以稍后通过重新授权流程请求额外的作用域。

Storefront API

Storefront API 专为面向客户的应用设计。与 Admin API 不同,它使用 公开访问令牌,可以安全地包含在客户端代码中。

使用场景

  • Hydrogen 店面:无头店面中的所有数据获取
  • 自定义产品选择器:店面上的 JavaScript 小组件
  • 移动应用:原生 iOS/Android 购物应用
  • Buy Button:在外部网站上嵌入产品
  • 购物车操作:添加商品、应用折扣码、管理购物车

与 Admin API 的主要区别

特性Admin APIStorefront API
认证私有访问令牌公开访问令牌
数据访问完整读写只读 + 购物车变更
目标受众应用后端面向客户的客户端
速率限制按商店按应用、按商店
客户数据完整访问仅已认证客户
# Storefront API: Fetch products for a collection page
query CollectionProducts($handle: String!, $first: Int!) {
collection(handle: $handle) {
title
products(first: $first) {
edges {
node {
id
title
priceRange {
minVariantPrice {
amount
currencyCode
}
}
images(first: 1) {
edges {
node {
url
altText
}
}
}
}
}
}
}
}

Payments Apps API

Payments Apps API 让你可以构建直接与 Shopify Checkout 集成的支付网关。这是面向支付服务提供商的专用 API。

  • 支持 信用卡站外自定义站内 支付方式
  • 信用卡处理需要符合 PCI DSS 合规要求
  • 使用基于 Webhook 的支付会话流程
  • 通过合作伙伴仪表板注册,需要额外审核
Payments Apps 是专用的

大多数开发者永远不会用到此 API。它仅在你构建支付网关或替代支付方式时才有用。如果你只需要接受付款,请使用 Shopify Payments 或现有的支付网关应用。

Customer Account API

Customer Account API 在新的客户账户体验中(2024 年推出)启用客户自助服务功能。它让已认证的客户可以:

  • 查看和管理订单
  • 更新个人信息
  • 管理地址
  • 访问忠诚度和奖励计划
  • 查看 B2B 公司信息

此 API 使用通过 Shopify 新客户认证系统获取的 客户访问令牌

Functions API

Functions API 定义了 Shopify Functions 如何接收输入数据并返回输出。它不是传统的 HTTP API——而是你的 WebAssembly 模块与 Shopify 运行时之间的契约。

每个 Function 扩展目标都有特定的输入/输出模式:

# Input query for a Discount Function
query Input {
cart {
lines {
merchandise {
... on ProductVariant {
product {
hasAnyTag(tags: ["vip-discount"])
}
}
}
cost {
totalAmount {
amount
}
}
}
}
}
// Output: Apply a 10% discount to VIP products
{
"discounts": [
{
"value": {
"percentage": {
"value": "10.0"
}
},
"targets": [
{
"productVariant": {
"id": "gid://shopify/ProductVariant/123"
}
}
],
"message": "VIP 10% Off"
}
]
}

Checkout Extensions API

Checkout Extensions API 让你可以构建在 Shopify 结账流程中渲染的基于 React 的 UI 组件。扩展目标定义了你的 UI 出现的位置:

  • purchase.checkout.block.render -- 主结账区域中的区块
  • purchase.checkout.header.render-after -- 结账页头之后
  • purchase.checkout.footer.render-before -- 结账页脚之前
  • purchase.thank-you.block.render -- 感谢页面上
  • purchase.checkout.shipping-option-item.render-after -- 每个配送选项之后

扩展使用 Checkout UI Extensions 库中的一组有限的 UI 组件(不是 Polaris)。

Flow Triggers 和 Actions API

Shopify Flow 是面向商家的可视化自动化平台。你的应用可以通过提供以下内容与 Flow 集成:

  • Triggers:启动 Flow 工作流的事件(例如"新评论已提交")
  • Actions:Flow 可以在你的应用中调用的操作(例如"发送忠诚积分")

这是一种强大的方式,可以让你的应用在不构建完整的自动化 UI 的情况下变得更有用。

API 版本管理

Shopify 使用 基于日历的版本管理 系统。新的 API 版本每季度发布:

版本发布时间状态
2025-072025 年 7 月受支持
2025-102025 年 10 月受支持
2026-012026 年 1 月当前稳定版
2026-042026 年 4 月候选发布版

版本管理规则

  • 每个版本在发布后 支持 12 个月
  • 破坏性变更 只会在版本之间发生,永远不会在版本内部发生
  • 你在 API 请求中指定版本:
    • GraphQL: X-Shopify-API-Version: 2026-01 请求头
    • REST: /admin/api/2026-01/products.json URL 路径
  • 弃用通知 会在移除前 9 个月出现在 API 响应中
# GraphQL request with explicit version
curl -X POST "https://your-store.myshopify.com/admin/api/2026-01/graphql.json" \
-H "Content-Type: application/json" \
-H "X-Shopify-Access-Token: your-token" \
-d '{"query": "{ shop { name } }"}'
保持使用最新版本

设置日历提醒,每季度更新你的 API 版本。落后于版本意味着错过新功能,最终会遇到弃用障碍。Shopify CLI 和合作伙伴仪表板会在你使用过时版本时显示警告。

速率限制

速率限制保护平台并确保商店上所有应用的公平访问。

GraphQL 速率限制

GraphQL 使用 基于成本 的系统:

  • 每个商店授予你的应用 每秒 1,000 成本点
  • 以每秒 50 点的速率恢复(漏桶算法)
  • 简单查询花费 1-10 点;带连接的复杂查询花费更多
  • 响应包含 throttleStatus 对象,显示你的剩余配额
{
"extensions": {
"cost": {
"requestedQueryCost": 12,
"actualQueryCost": 8,
"throttleStatus": {
"maximumAvailable": 1000,
"currentlyAvailable": 992,
"restoreRate": 50
}
}
}
}

REST 速率限制

REST 使用更简单的 基于请求 的模型:

  • 标准计划:每个商店每秒 40 个请求
  • Shopify Plus:每个商店每秒 80 个请求(某些端点更高)
  • 通过 X-Shopify-Shop-Api-Call-Limit 响应头跟踪

处理速率限制

// Retry with exponential backoff
async function shopifyRequest(query, retries = 3) {
for (let attempt = 0; attempt < retries; attempt++) {
const response = await admin.graphql(query);

if (response.status === 429) {
const retryAfter = parseFloat(
response.headers.get("Retry-After") || "1"
);
await new Promise(r => setTimeout(r, retryAfter * 1000));
continue;
}

return response.json();
}
throw new Error("Rate limit exceeded after retries");
}

基于游标的分页

GraphQL 和 REST 都对列表端点使用 基于游标的分页。这比基于偏移量的分页更可靠,因为它能正确处理并发数据变更。

GraphQL 分页

query Products($first: Int!, $after: String) {
products(first: $first, after: $after) {
edges {
cursor
node {
id
title
}
}
pageInfo {
hasNextPage
endCursor
}
}
}

要获取下一页,将 endCursor 值作为 after 变量传递。持续获取直到 hasNextPagefalse

REST 分页

REST API 在 Link 响应头中返回分页链接:

Link: <https://store.myshopify.com/admin/api/2026-01/products.json?page_info=abc123&limit=50>; rel="next"

解析 rel="next" URL 并将其用于下一个请求。

不要使用页码

Shopify 多年前就弃用了基于页码的分页。始终使用基于游标的分页。如果你发现旧教程使用 ?page=2,它们已过时且无法使用。

选择正确的 API

我想要...使用这个 API
从应用后端管理产品、订单、客户Admin API (GraphQL)
在自定义店面上展示产品Storefront API
使用 Hydrogen 构建无头店面Storefront API
在结账时自定义折扣逻辑Functions API(折扣目标)
向结账页面添加 UICheckout Extensions API
作为网关处理支付Payments Apps API
让客户管理他们的账户Customer Account API
与 Shopify Flow 自动化集成Flow Triggers & Actions API
导出/导入大型数据集Admin API Bulk Operations

在下一课中,我们将深入研究 GraphQL——驱动最重要的 Shopify API 的查询语言。