GraphQL APIのmutationを使ってデータ更新をする方法
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
このエントリはMagento Advent Calendar 2019の19日目です。
今回はGraphQLを使ってデータ更新をするための仕組み「Mutation」について解説します。
Mutationとは
GraphQLの仕様上、データを取得するための形式は「Query」と定義されています。これに対し、データを更新するための形式は「Mutation」と定義されています。
どちらも同じエンドポイントから利用でき、HTTPメソッドも同じものが使えます。
QueryとMutationの違い
Queryの例
前回の例では、
{ query: `{ products ( filter: { name: { like: "%キーワード%"} } pageSize: 18 ) { total_count items { id name url_path thumbnail { url } price { regularPrice { amount { value currency } } } } } }` }
というようなデータをMagento側に送信しました。このJSONデータの最上位要素に書いてある「query」をもってMagento側は「これは問い合わせリクエストなのだな」と解釈をするわけです。
Mutationの例
DevDocsでは、以下のような例があげられています。
{ mutation { addSimpleProductsToCart( input: { cart_id: "カートID" cart_items: [ { data: { quantity: 1 sku: "追加する商品のSKU" } } ] } ) { cart { items { id product { name sku } quantity } } } } }
この例ではJSONデータの最上位要素が「mutation」になっていて、次の要素に何をしたいかが書かれています。
addSimpleProductsToCartという名称の通り、シンプル商品を指定したIDのカートに追加しているわけです。
このように、Mutationを使えばGraphQLベースでデータの更新ができる仕組みがMagentoには備わっています。
Mutationを使う際の注意点
Mutationはデータの更新を行うための仕組みです。
当然ですが、「誰の」データを更新するのかをはっきりさせておく必要があります。
REST APIの認証で少し触れましたが、GraphQLでも必要に応じて認証を使うことができます。
GraphQLの場合、セッション認証を用いて「閲覧している本人」の情報を操作することはできます。
あるいはgenerateCustomerToken mutationを用いてトークンを取得し、それをHTTPヘッダーに含めても構いません。
(利便性からするとセッション認証のほうが実装は楽でしょう)
次回はMagentoのGraphQLスキーマを独自に拡張し、標準で使えない項目を使えるようにする方法をご紹介します。
- お知らせ (34)
- Magento Open Source (169)
- Adobe Commerce (86)
- Magentoトピックス (349)
- Magentoバージョンアップ (11)
- OroCommerce (1)
- AkeneoPIM (16)
- Shopware (26)
- 世界のプライバシー保護規制 (11)
- OroCRM (14)
- Typo3 (9)
- イベント (27)
- Mage-OS (1)
- エクステンションリリース情報 (75)
- Mautic (1)