Shopify Laravel GraphQLで高速取得
Shopify Laravel GraphQLで高速取得
Shopify+LaravelでGraphQL APIを活用する
ShopifyはREST APIだけでなくGraphQL APIを提供しており、Laravelとの組み合わせで高速かつ柔軟なデータ取得が可能です。GraphQL APIは必要なフィールドだけをリクエストできるため、ネットワーク帯域を節約し、レスポンス時間を短縮します。LaravelではHTTPクライアントを使って簡単にGraphQLエンドポイントへリクエストを送ることができ、認証にはShopifyのアクセストークンを利用します。
GraphqlQueryとMutationの実装例
GraphqlQueryは読み取り専用のクエリ、Mutationはデータ変更を行う操作です。Laravelのサービスクラスで以下のように実装します。
public function getProducts()
{
$query = <<<'GRAPHQL'
{
products(first: 10) {
edges {
node {
id
title
variants(first: 5) {
edges { node { id price } }
}
}
}
}
}
GRAPHQL;
return $this->client->post('/admin/api/2026-01/graphql.json', [
'json' => ['query' => $query]
]);
}
Mutationの例として、商品を作成するリクエストは次のようになります。
public function createProduct($title, $price)
{
$mutation = <<<'GRAPHQL'
mutation ($input: ProductInput!) {
productCreate(input: $input) {
product { id title }
userErrors { field message }
}
}
GRAPHQL;
$variables = ['input' => ['title' => $title, 'variants' => [['price' => $price]]]];
return $this->client->post('/admin/api/2026-01/graphql.json', [
'json' => ['query' => $mutation, 'variables' => $variables]
]);
}
データ取得とクエリ作成のベストプラクティス
GraphqlQueryを作成する際は、必要なフィールドだけを指定し、不要なデータを排除します。これにより、API制限に引っかかりにくく、レスポンスサイズを小さく保てます。また、Laravelのキャッシュ機能を利用して頻繁にアクセスされるデータをローカルに保存し、API呼び出し回数を削減することも重要です。
エラーハンドリングとページネーション
GraphQL APIはレスポンスにerrorsフィールドを含む場合があります。Laravel側で例外を捕捉し、ユーザーに分かりやすいメッセージを返すようにします。ページネーションはedgesとpageInfoを利用し、hasNextPageとendCursorで次ページの取得を制御します。
if ($response['data']['products']['pageInfo']['hasNextPage']) {
$cursor = $response['data']['products']['pageInfo']['endCursor'];
// 次ページを取得
}
カーソルと効率的な取得、API制限への対策
カーソルベースのページネーションは、インデックスベースよりも安定したデータ取得を可能にします。Shopifyは1分あたりのリクエスト数に制限があるため、カーソルを使って必要なデータだけを順次取得し、リクエスト数を最小化します。さらに、batch機能を活用して複数のクエリを1回のリクエストで送ることで、API制限を超えにくくなります。
コメント
コメントを投稿