Shopify Admin API

userErrors 和顶层 errors 到底先看哪个

现象#

调用 productCreate 返回 200,代码读 data.productCreate.product.id 时抛空指针;换一条查询又只拿到 errors 数组,data 直接是 null。

原因#

  • 顶层 errors 表示请求本身不合法,例如字段名拼错、成本超限,此时 data 为 null
  • userErrors 属于业务校验失败,请求执行了但没落库,HTTP 状态仍是 200
  • 选择集里某个非空字段报错会让整个 data 变成 null,其他字段的结果一起被掩盖
  • SDK 把 errors 抛异常、把 userErrors 当普通数据返回,业务层容易只处理其中一种

处理步骤#

  1. 统一封装:先判 errors 非空则按请求错误抛出,附带 extensions.code
  2. 再判 payload.userErrors 非空,逐条记录 field 与 message
  3. 两者都为空才认为写入成功,并回读 id 确认对象真实存在
  4. 对 MAX_COST_EXCEEDED 与 THROTTLED 单独走退避重试,不要计入业务失败
  5. 日志同时记 X-Request-Id,方便与 Shopify 侧记录对齐

验收标准#

构造缺必填字段的请求,日志出现 userErrors 的 field 与 message;构造错字段名的请求,出现顶层 errors 与 code,两条路径互不吞没。

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