CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData GraphQL Driver が Mutation のリクエストに対応しました

f:id:sugimomoto:20220208215628p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

前回の記事で自動スキーマ検出の対応を紹介したんですが、合わせて強力なアップデートがあったので、お届けします。

www.cdatablog.jp

GraphQL では Mutation と呼ばれる、サーバー側のリソース・データを更新するための仕組みが提供されていますね。

graphql.org

f:id:sugimomoto:20220208215245p:plain

大胆に言ってしまえば、RDBのストアド・プロシージャみたいな仕組みかなと思います。APIの文脈で行けば、RPCライクなものですね。

今までCData GraphQL DriverではQueryだけがサポートされていて、データ読み取り特化だったのですが、最新バージョンではこのMutation を呼び出す機能がサポートされたので、紹介したいと思います。

対象のGraphQL

今回もGraphQL を自動生成するサービス、Hasraを利用しました。

Hasraでは予め以下のような「Accounts」テーブルを作っています。

f:id:sugimomoto:20220208215250p:plain

Hasraは大変便利なことに、このデータモデルから自動的にCreate/Update/Delete用の各種Mutationを生成してくれます。

今回はこのMutationを実行してみます。

f:id:sugimomoto:20220208215255p:plain

Mutationを実行してみる

まずはシンプルに1レコード追加する「insert_Accounts_one」のMutationを実行してみましょう。

GraphiQL上では以下のような記述になります。

mutation MyMutation {
  insert_Accounts_one(object: {AccountName: "Sample Company", AccountNumber: "004"}) {
    AccountName
    AccountNumber
    Id
  }
}

f:id:sugimomoto:20220208215300p:plain

CData GraphQL Driver はJDBCを利用しましたが、基本的にODBCADO.NET、どのテクノロジーでも利用できます。

www.cdata.com

f:id:sugimomoto:20220208215305p:plain

接続設定は前回と同様で、そのまま同じ設定で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ではストアド・プロシージャの形式で利用できるようになっています。

f:id:sugimomoto:20220208215312p:plain

今回のようなMutation だと、以下のようにストアド・プロシージャを発行すればシンプルに利用できます。

Exec insert_Accounts_one AccountName = 'CData Driver Sample', AccountNumber = '005';

f:id:sugimomoto:20220208215317p:plain

配列のオブジェクトを利用する場合

ちなみに、Hasraの場合以下のような一括書き込み処理もサポートしていたりします。

mutation MyMutation {
  insert_Accounts(
    objects: [
      {AccountName: "Sample2", AccountNumber: "006"},
      {AccountName: "Sample3", AccountNumber: "007"}
    ]) {
    affected_rows
  }
}

f:id:sugimomoto:20220208215326p:plain

このような配列形式のオブジェクトを利用したい場合、以下のように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;

f:id:sugimomoto:20220208215333p:plain

おわりに

このようにMutationの対応が行われたことで、より幅広く様々なツールとGraphQLインターフェースを通じた連携が可能になりました。

ETL・EAIツールなどでは利用するケースが多いと思うので、ぜひ試してみてください。

ご不明な点がありましたら、お気軽にテクニカルサポートフォームまでお問い合わせください。

https://www.cdata.com/jp/support/submit.aspx