Shopify Admin API

GraphQL 游标分页 endCursor 不变导致死循环

现象#

全量同步商品的脚本跑了一夜没结束,日志里每页打印的都是同一批 ID,pageInfo.endCursor 每次相同,数据量却一直不增长。

原因#

  • 循环体没有把 endCursor 回写到 after 变量,每次请求都从第一页重新开始
  • 取的是 edges[0].cursor 而不是 pageInfo.endCursor,指针永远停在页首
  • after 传了空字符串而不是 null,服务端按无游标处理,又回到第一页
  • 只用 hasNextPage 做退出条件,游标为空时既不报错也不停止

处理步骤#

  1. 每轮只从响应里取 pageInfo.endCursor,并断言它与上一轮不同
  2. 循环条件写成 hasNextPage and endCursor,任一为空立即退出
  3. 首页显式不传 after,不要传空串或上一轮残留的变量
  4. 记录已处理的 ID 集合,出现重复就中断并打印当前游标
  5. 单页 first 控制在 250 以内,超出会直接返回参数错误

验收标准#

连续翻页时游标单调变化,最后一页 hasNextPage 为 false,导出条数与后台计数一致且无重复 ID。

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