Shopify GraphQL创建产品时options参数类型转换错误排查
问题描述
我正在使用Shopify Admin的GraphiQL编辑器测试推送产品至店铺的mutation,代码如下:
mutation createProduct($input: ProductInput!) { productCreate(input: $input) { product { title descriptionHtml vendor handle tags variants(first: 50) { nodes { inventoryItem { tracked sku } price sku } } options { name position values } } } }
根据文档,$input为ProductInput!类型,我以为input.options是包含name、position、values字段的对象数组,但传入如下参数时:
... "options": [ { "name": "Size", "position": 1, "values": [ "Small", "Medium", "Large" ] } ] ...
Shopify API返回错误:
"message": "Variable $input of type ProductInput! was provided invalid value for options.0 (Could not coerce value {name:\"Taille\",position:1,values:[\"S\",\"M\",\"L\"]} to String)"
此前用REST API时可以通过这种方式传入产品选项,请问GraphQL中如何实现相同效果(比如设置Size和Color两个选项)?是不是文档和实际实现不一致?
解决方案
错误原因
你混淆了Shopify不同API的字段定义:Admin API的ProductInput里的options字段不是对象数组,而是字符串数组,用来定义产品的选项名称(比如["Size", "Color"]),而不是包含名称、位置、值的完整对象。你之前看的是Storefront API的ProductOption对象定义,和Admin API的输入参数规则不一样。
正确实现方式
在Admin GraphQL API中,创建产品时:
options字段传入选项名称的字符串数组,用来指定产品有哪些选项(比如["Size", "Color"])- 选项的具体值需要和产品变体(
variants)绑定,通过变体的optionValues字段来设置每个变体对应的选项值。
示例:创建带Size和Color选项的产品
Mutation代码:
mutation createProduct($input: ProductInput!) { productCreate(input: $input) { product { title options { name position values } variants(first: 50) { nodes { sku price optionValues { name value } } } } userErrors { message field } } }
变量参数:
{ "input": { "title": "测试产品", "vendor": "测试供应商", "options": ["Size", "Color"], // 字符串数组,定义选项名称 "variants": [ { "sku": "PROD-S-R", "price": "29.99", "optionValues": [ { "name": "Size", "value": "Small" }, { "name": "Color", "value": "Red" } ] }, { "sku": "PROD-M-B", "price": "39.99", "optionValues": [ { "name": "Size", "value": "Medium" }, { "name": "Color", "value": "Blue" } ] } ] } }
关于文档的说明
你之前参考的是Storefront API的ProductOption对象(用于查询产品信息),而Admin API的ProductInput(用于创建/更新产品)的options字段规则不同,属于文档参考错误,并非文档与实际实现不一致。Admin API的ProductInput定义里,options是[String!]类型,用来快速定义选项名称,选项值则通过变体关联。
内容的提问来源于stack exchange,提问作者Yassine Badache
相关产品推荐
相关产品推荐

