⛳
Shopify の GraphQL Admin API から Product 一覧を取得する
Shopify が提供しているAdmiin APIを使用することで、Shopifyに登録している商品一覧を取得できます。
Shopify には GraphQL と REST API の2つの管理系 API が用意されていますが、REST Admin API の 2024-04 リリース版から Product API がメンテナンスモードとなりました。そのため、これから新規で Product 関連の機能開発をするのであれば、GraphQLを使うのが良さそうです。
Go で Shopify の GraphQL Admin API を叩いてみた系の記事がなかったので、サンプルコードを共有します。
使用するライブラリ
Go の Shopify 公式ライブラリはありませんが、公式ドキュメントに紹介されている go-shopify を使用します。
Go で GraphQL Admin API から Product 一覧を取得するサンプルコード
以下のコードは、ShopifyのGraphQL APIから商品一覧を取得するサンプルです。
type Category struct {
FullName string `json:"fullName"`
}
type FeatureImage struct {
URL string `json:"url"`
}
// https://shopify.dev/docs/api/admin-graphql/2024-07/objects/Product
type Product struct {
ID string `json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Tags []string `json:"tags"`
Category Category `json:"category,omitempty"`
FeatureImage FeatureImage `json:"featuredImage"`
}
type Edge struct {
Node Product `json:"node"`
}
type Products struct {
Edges []Edge `json:"edges"`
}
type Response struct {
Products Products `json:"products"`
}
func listItems(shopName string) {
ctx := context.Background()
err := setup(shopName)
if err != nil {
log.Fatal(fmt.Printf("Error setting up Shopify client: %s", err))
}
q := `{
products (first: 10) {
edges {
node {
id
title
description
tags
featuredImage {
url
}
category {
fullName
}
}
}
}
}`
var resp Response
err = client.GraphQL.Query(ctx, q, nil, &resp)
if err != nil {
log.Fatal(fmt.Printf("Error querying Shopify: %v", err))
}
fmt.Printf("Items: %+v\n", resp.Products.Edges)
}
func setup(shopName string) error {
var err error
app = goshopify.App{
ApiKey: os.Getenv("SHOPIFY_API_KEY"),
ApiSecret: os.Getenv("SHOPIFY_API_SECRET"),
RedirectUrl: os.Getenv("SHOPIFY_REDIRECT_URL"),
Scope: "read_products",
}
client, err = goshopify.NewClient(app, shopName, os.Getenv("SHOPIFY_ACCESS_TOKEN"), goshopify.WithVersion("2024-07"))
if err != nil {
return err
}
return nil
}
以下のようにデータを取得できました。
Items: [{Node:{ID:gid://shopify/Product/xxxxxxx Title:サンプル商品1 Description:この商品はサンプル商品です。 APIテストのためのサンプルです。 Tags:[] Category:{FullName:Software > Computer Software > Business & Productivity Software > Project Management Software} FeatureImage:{URL:https://cdn.shopify.com/s/files/yyyyyyy}}}]
GraphQL で取得したデータを構造体にマッピングするため、自分で構造体を定義していますが、ここはもっとスマートな方法があるかもしれません。
はまりポイント
使用するAPIバージョンを明示しないと、Not Acceptable
エラーが発生します。
クライアント作成時に、goshopify.WithVersion("2024-07")
のように、バージョンを指定します。
Discussion