Shopify Storefront API

products 传 first: 250 却拿不到全部商品怎么办

现象#

列表页只出现 250 个商品,后台明明有 800 多个;把 first 改成 500 直接报 first must be between 1 and 250,嵌套字段多一点还会收到 MAX_COMPLEXITY_EXCEEDED。

原因#

  • 连接单页的硬上限是 250,超过不会自动截断,而是直接返回 schema 校验错误
  • 单次查询成本上限 1000 点,first: 250 再嵌套 variants 和 images 很容易越线
  • 没有读取 pageInfo.hasNextPage 与 endCursor,只取一页就当成全量数据
  • products 默认只返回已发布到当前渠道的商品,未发布的商品不在结果集中

处理步骤#

  1. 把 first 固定为 100 或 250,并在查询里加 pageInfo { hasNextPage endCursor }
  2. 用 after: endCursor 循环翻页,直到 hasNextPage 为 false
  3. 嵌套连接改成 variants(first: 10) 这类小值,压低单页成本
  4. 确认商品已发布到 Storefront 渠道,或用 @inContext(country:) 指定市场
  5. 全量同步场景改用 Admin API 的 bulkOperation,不要在前端翻几十页

验收标准#

循环结束后累计条数与后台商品数一致,最后一页 hasNextPage 为 false,响应中没有 errors。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。