こんにちは。CData Software Japan リードエンジニアの杉本です。
前回の記事で自動スキーマ検出の対応を紹介したんですが、合わせて強力なアップデートがあったので、お届けします。
GraphQL では Mutation と呼ばれる、サーバー側のリソース・データを更新するための仕組みが提供されていますね。
大胆に言ってしまえば、RDBのストアド・プロシージャみたいな仕組みかなと思います。APIの文脈で行けば、RPCライクなものですね。
今までCData GraphQL DriverではQueryだけがサポートされていて、データ読み取り特化だったのですが、最新バージョンではこのMutation を呼び出す機能がサポートされたので、紹介したいと思います。
対象のGraphQL
今回もGraphQL を自動生成するサービス、Hasraを利用しました。
Hasraでは予め以下のような「Accounts」テーブルを作っています。
Hasraは大変便利なことに、このデータモデルから自動的にCreate/Update/Delete用の各種Mutationを生成してくれます。
今回はこのMutationを実行してみます。
Mutationを実行してみる
まずはシンプルに1レコード追加する「insert_Accounts_one」のMutationを実行してみましょう。
GraphiQL上では以下のような記述になります。
mutation MyMutation { insert_Accounts_one(object: {AccountName: "Sample Company", AccountNumber: "004"}) { AccountName AccountNumber Id } }
CData GraphQL Driver はJDBCを利用しましたが、基本的にODBCやADO.NET、どのテクノロジーでも利用できます。
接続設定は前回と同様で、そのまま同じ設定でMutationが利用できます。
プロパティ名 | 値 | 備考 |
---|---|---|
AuthScheme | NONE | カスタムヘッダーで認証を行うため、NONEに指定します。 |
URL | 例)https://massive-walrus-84.hasura.app/v1/graphql | GraphQLエンドポイントURLを指定します。 |
CustomHeaders | 例)x-hasura-admin-secret:YOUR_API_KEY | Hasraから取得したAPI KeyをHedaer名と一緒に設定します。 |
Mutation はCData GraphQL Driverではストアド・プロシージャの形式で利用できるようになっています。
今回のようなMutation だと、以下のようにストアド・プロシージャを発行すればシンプルに利用できます。
Exec insert_Accounts_one AccountName = 'CData Driver Sample', AccountNumber = '005';
配列のオブジェクトを利用する場合
ちなみに、Hasraの場合以下のような一括書き込み処理もサポートしていたりします。
mutation MyMutation { insert_Accounts( objects: [ {AccountName: "Sample2", AccountNumber: "006"}, {AccountName: "Sample3", AccountNumber: "007"} ]) { affected_rows } }
このような配列形式のオブジェクトを利用したい場合、以下のようにTEMPテーブルという機能を用いて、一時的にデータを格納することで対応できます。
Insert into insert_Accounts_objects#TEMP(AccountName,AccountNumber)VALUES('INSERT Sample 1','008'); Insert into insert_Accounts_objects#TEMP(AccountName,AccountNumber)VALUES('INSERT Sample 2','009'); Exec insert_Accounts objects = insert_Accounts_objects#TEMP;
おわりに
このようにMutationの対応が行われたことで、より幅広く様々なツールとGraphQLインターフェースを通じた連携が可能になりました。
ETL・EAIツールなどでは利用するケースが多いと思うので、ぜひ試してみてください。
ご不明な点がありましたら、お気軽にテクニカルサポートフォームまでお問い合わせください。