如何通过Shopify REST API获取产品列表的指定变体字段
Shopify REST API 筛选产品变体字段问题
当前请求代码
$resp = $Rest->get( 'products', [], [ 'limit' => 250, 'fields' => 'id,title,variants', 'published_status' => 'published', 'status' => 'active' ] );
当前响应(变体返回完整字段)
Array ( [0] => stdClass Object ( [id] => 237462354 [title] => Product 1 title [variants] => Array ( [0] => stdClass Object ( [product_id] => 237462354 [id] => 1481824 [title] => Default Title [price] => 105.99 [sku] => MYSKU11002 [position] => 1 [inventory_policy] => deny [compare_at_price] => [fulfillment_service] => manual [inventory_management] => shopify [option1] => Default Title [option2] => [option3] => [created_at] => 2022-08-12T10:13:39-04:00 [updated_at] => 2022-08-16T14:55:31-04:00 [taxable] => 1 [barcode] => 814812747124 [grams] => 2268 [image_id] => [weight] => 5 [weight_unit] => lb [old_inventory_quantity] => 1 [requires_shipping] => 1 ) ) )
期望响应(仅保留变体的product_id和sku)
Array ( [0] => stdClass Object ( [id] => 237462354 [title] => Product 1 title [variants] => Array ( [0] => stdClass Object ( [product_id] => 237462354 [sku] => MYSKU11002 ) ) )
问题与解答
尝试了fields=id,title,variants.sku、fields=id,title,variants/sku、fields=id,title,variants[sku]等写法均无效,想确认Shopify REST API是否支持这种嵌套字段筛选?
结论:Shopify REST API的fields参数不支持嵌套字段筛选。对于关联的嵌套资源(如产品的variants),REST API仅支持两种选择:要么返回该资源的全部字段,要么完全不返回该资源。虽然GraphQL API支持精确指定嵌套字段,但REST API没有这个能力。
替代方案
- 本地数据过滤:获取完整的variants数据后,在PHP代码中手动筛选所需字段,示例代码如下:
// 假设$resp是返回的产品数组 foreach ($resp as $product) { if (!empty($product->variants)) { $filteredVariants = []; foreach ($product->variants as $variant) { $filteredVariant = new stdClass(); $filteredVariant->product_id = $variant->product_id; $filteredVariant->sku = $variant->sku; $filteredVariants[] = $filteredVariant; } $product->variants = $filteredVariants; } }
- 改用GraphQL API:如果对返回数据量要求严格,可切换到Shopify GraphQL API,通过查询精确指定需要的字段。
内容的提问来源于stack exchange,提问作者Barry Chapman
相关产品推荐
相关产品推荐

