[CAIで作るAPI開発] データアクセスサービスコネクタ （通称DAS）を使ってみた【設定編】

この記事は インフォマティカ Advent Calendar 2023 の記事として書かれています。

# 最初に
CAIでAPI開発する際に、RDBMSにアクセスして
テーブルのデータを挿入・更新したり、内容を取得してレスポンスを返すなど
実装することがあると思います。
そんなときに便利な部品が DAS です。

## DASって何
従来、他のSOAPやREST APIを呼び出すための部品として
サービスコネクタというものが存在しておりました。
（私は勝手に”サビコネ”と呼んでおりますが）
そのサビコネの、データベースアクセスのための部品として
データアクセスサービスコネクタ、通称DASをご利用いただけます。
DASは、事前にSQL文をセットしておき、
これらをCAIのプロセスから適宜呼ぶことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/ce01153e-08b3-1006-b98e-70ca67f61926.png)

サービスコネクタとデータアクセスサービスコネクタは
全く違うものだということは今後覚えておいていただけるとよいかなと思います。
| # | アセット名 | 説明 |
|:--|:---|:---|
|  1 | サービスコネクタ  | RESTまたはSOAP APIを使用してサードパーティのサービスに接続|
|  2 | データアクセスサービスコネクタ  | 外部データベースに接続  |

## 前提条件
IDMCの環境があり、SecureAgentがインストール済みであること

:::note info
DASは2023年末現在では、SecureAgentにのみパブリッシュ可能で
Cloud Serverにはパブリッシュできません。
:::

## 事前準備
SecureAgentの環境に今回アクセスするデータベースのJDBCドライバを配置します。
下記のURLを参考にしてください。
https://docs.informatica.com/integration-cloud/application-integration/current-version/design/designing-service-connectors/creating-a-data-access-service-connector.html
なお、2023年末では、
- IBM DB2
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL

のデータベースへの接続をサポートしております。
各JDBCドライバは、各データベースベンダのWebサイトからダウンロードしてください。

なお、筆者ののWindows上のSecureAgentでは、下記のように、MySQLとOracleのJDBCドライバを配置しております。ご参考まで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/11204a37-ce1e-96e9-e8dc-ec37238351dc.png)


## DASを作成してみる
それでは、実際にDASを作成してみます。
IDMCのメニュー画面から「アプリケーション統合」クリックしてください。

「新規」→「サービスコネクタ」→「データアクセスサービスコネクタ」を選択するか
「ショートカット」ペインから「DAS」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/5d9ba4cc-7fc8-8ef1-517e-286551874d24.png)

### 定義の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/ab8f146b-e17c-8771-9605-e97f1f49d6ba.png)
定義タブの中では、下記の項目を設定します。

- 名前（必須）：このデータベース接続にふさわしい、わかりやすい名前を設定します。本記事では、DAS_OracleAWSRDSという名前にしております。
- 説明：わかりやすい説明
- 接続プロパティ
- JDBCドライバ（必須）：クラス名をフルパッケージで入力します。各JDBCドライバを提供しているベンダーのサイトで確認してください。Oracle Databaseに接続する場合は、"oracle.jdbc.driver.OracleDriver" となります。
- JDBC コネクションURL：データベースに接続するURLを記述します。Oracleの場合は、"jdbc:oracle:thin:@<ホスト名>:<ポート番号>:<SID>" になります。詳細は各ベンダーのJDBCのページを参照してください。
- ユーザ名（必須）：データベースユーザ
- パスワード（必須）：データベースユーザのパスワード

:::note info
DASで設定する上記のコネクションURLやユーザ名は、あくまでテスト用途です。
開発環境には開発環境用の設定が、本番環境向けの環境ごとの設定は
後述するアプリケーション接続で設定を行います。
:::

### アクションの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/5e11c316-308e-9dc5-a781-63d90887c271.png)

「＋」ボタンをクリックし、アクションを追加します。
アクションは、CAIのプロセスから呼び出す単位となります。
今回は、<strong>データベースのテーブルから全件取得する</strong>アクションを作成します。
- アクション名（必須）：わかりやすい名前を付けてください。”SELECT ALL UNIV” などどのような処理かわるのがよいでしょう。
- カテゴリ：空白のままでOKです
- 説明：空白のままでOKです

#### 入力タブの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/22db94d1-2de2-3e62-240c-6f7b348d6f5e.png)
SQL内で、変数を使用する場合は追加してください。
今回は利用しません。

#### SQLバインディングタブの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/0cf990f8-d405-3438-a5aa-719fb43bd097.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/c0f9efdc-7ff0-4053-d80c-8bae6ee4fd56.png)
- SQL名：わかりやすい任意の名前を入力します
- SQLテキスト： SQL文を入力します。今回は "MST_UNIV" テーブルから、情報を全件取得するSQLを記載します。
- タイプ：「データの操作」を選択します。
- その他の設定はデフォルトのままでOKです。

なお、SQL文は、今回は1つのみ定義しましたが
１つのアクションで複数定義することが可能です。
例えば、引数として取得した値を2つのテーブルに挿入したいので、SQL文を2つ設定したい。
などの要件がある場合に有用です。

#### テストタブの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/ba27361c-97a5-4aa4-a9db-36b49d6a3cc0.png)
「テスト」ボタンをクリックし、SQLバインディングタブに指定したSQLのテストを行います。
その際、JDBCドライバをセットしたSecureAgentを「サーバのテスト」のAgent一覧から選択し、
「テスト」ボタンをクリックします。

:::note info
JDBCドライバを設定し、当該データベースへのアクセスがネットワーク的に許可されていないSecureAgentを選択していない場合はテストに失敗します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/9ff4c3e7-3f0b-c95a-f5b1-7513e801ab21.png)
応答ペイロードを確認し、期待とおりの結果が返ってきているか確認します。

:::note info
CAIでは内部データはXMLデータとして一旦保持されるため、
テスト結果は、XML形式で表示されます
:::

最後にテスト結果から、プロセスオブジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/bea09b7e-385c-0f05-5663-bf0482578b20.png)

「プロセスオブジェクトの生成」ボタンをクリックし、ダイアログの指示に従って作成すると
下記の4つのプロセスオブジェクトが生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/35a92ce5-d156-a4e4-1ed4-1ca37d5549fb.png)
プロセスオブジェクト「row」の中身が、まさにテーブルの構造を表現するプロセスオブジェクトとなります。

### 生成されたプロセスオブジェクトの確認

最後に「プロセスオブジェクト」タブをクリックすると
先ほど生成されたプロセスオブジェクトの内容を確認することができます。
プロセスオブジェクトの「row」を選択し、下部ペインの「フィールド」タブをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/b702324e-bee4-9001-1128-4bb2808c2f87.png)
するとSQLバインディングのSQL文で指定したテーブルのカラムが、プロセスオブジェクトとして
自動生成されていることがわかります。

なお、下記の図が実際のテーブルの構造です。
各カラムが、プロセスオブジェクトの各フィールドで表現できていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/00983e0d-d202-767b-4de6-ada596230fdb.png)


これで、DASの設定が一通り完了しました。

本記事は、以上となります。
次回の【実装編】では、実際にCAIから接続してテーブルの値をJSONで返却するAPIの作り方を
お届けしたいと思います。