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

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

# 最初に
CAIでAPI開発する際に、RDBMSにアクセスして
テーブルのデータを挿入・更新したり、内容を取得してレスポンスを返すなど
実装することがあると思います。そんなときに便利な部品が DAS (データアクセスサービスコネクタ)です。
本記事は、[前編である【設定編】の記事](https://qiita.com/amatsuba-infa/items/a05a3c191d78cc87a332)をご覧いただいた方を前提としておりますので
設定がまだの方は、上記のリンクからご覧ください。

## アプリケーション接続の作成
DAS自体の設定が完了した後は、環境別に
アプリケーション接続の設定を行います。
「新規」→「アプリケーション接続」→「アプリケーション接続」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/a27e0350-0ebc-60a0-db38-ec85fab77e7f.png)

新規作成したアプリケーション接続で以下の項目を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/022d9a53-96c0-0edb-71d8-4874d321cbd0.png)

- 名前（必須）： わかりやすい名前にしましょう、"ConnRDSAprojectProd" など
- タイプ（必須）： 設定したDASの設定を選択してください
（DASが選択肢に出てこない場合は、DASの設定がパブリッシュ済みか否かを確認します。）
- 実行環境： データベースに接続可能な場所に配置されているSecureAgentを選択してください
- JDBC Driver（必須）： クラス名をフルパッケージで入力します。各JDBCドライバを提供しているベンダーのサイトで確認してください。Oracle Databaseに接続する場合は、"oracle.jdbc.driver.OracleDriver" となります。
- JDBC コネクションURL（必須）：データベースに接続するURLを記述します。Oracleの場合は、"jdbc:oracle:thin:@<ホスト名>:<ポート番号>:" になります。詳細は各ベンダーのJDBCのページを参照してください。
- ユーザ名（必須）：データベースユーザ
- パスワード（必須）：データベースユーザのパスワード

:::note info
DASの設定は1つですが、アプリケーション接続はデータベースの環境ごとに
作成する必要があります。環境とは、本番用DB、検証用DB、開発用DB等です。
:::

「テスト」ボタンをクリックし、「合格しました」が表示されることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/1cbc3702-3d0b-2382-11a4-fcc5fa795905.png)

「パブリッシュ」ボタンをクリックし、パブリッシュが成功することを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/c031cd64-9b35-b014-35ca-3da568aa60e7.png)


## プロセス（API）の作成
「新規」→「プロセス」→「プロセス」を選択し、新しいプロセスを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/d3ac02f8-9ac0-f0ae-c585-b545c5a20c36.png)

### 開始ステップ
「開始」ステップをクリックし、下部のペインで設定を行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/da4ab844-307c-bde8-820d-2b5b34dc2dab.png)
- 名前(必須)：大学の情報をすべて取ってくるという意味で"GetAllUnivs"等わかりやすい名前にします

「開始」タブで、「匿名アクセスを許可します」にチェックをいれ、「次で実行」がクラウドサーバであることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/fdb6d7e3-84bb-01d8-2cd7-e21b84a26246.png)

「出力フィールド」タブで、「＋」ボタンをクリックし、このプロセスの返却値の設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/636fef73-005c-487d-dbfb-f7cf7af991a2.png)
- 出力形式： ペイロード全体
- 名前： "allunivs"
- タイプ： タイプをさらに表示
「カスタムタイプ」を選択し、「Any」と「オブジェクトリストを許可」の両方にチェックをいれて「OK」ボタンをクリックします![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/8ed42114-2b7f-d4f2-879c-03d92f437c3a.png)

下記のようになっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/cd234ab0-7873-dccb-16d3-844d1fe7bdc5.png)

### サービスステップ
「サービス」ステップを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/c04b3d81-1af7-6e09-ee4d-2b74ac9fdfa2.png)

「サービス」タブで、下記の通り設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/d14454a6-0169-2cc3-04fe-012765ac2c2e.png)
- サービスタイプ：接続
- 接続：<上記で作成した”アプリケーション接続を選択します”>
- アクション： SELECT ALLを選択します。
（※画像では SELECT ALL UNIVになっておりますがご容赦ください）

### 割り当てステップ
「割り当て」ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/4802a8ba-7455-a7b2-855b-b7f74449aa07.png)

「割り当て」タブから「フィールドの追加」を選択し”allunivs”を選択し、「次を使用する...」では「計算式」を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/d2504374-dc92-e863-be8d-080102942d7e.png)
ボタンをクリックし、式エディタを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/093374b7-3f74-919f-839a-fb7de4b4be21.png)
「フィールド」タブから、"univ"を選択し、「追加」リンクをクリックし、「OK」ボタンをクリックします。

「保存」ボタンをクリックし、その後、「パブリッシュ」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/04bc713f-56a2-153e-90cb-edff60023d76.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/7512c1c8-9412-92df-f1da-54c42eab6779.png)

### プロセス(API)の実行
「プロパティの詳細」からREST APIのURLをコピーし、
POSTMANにURLを張り付けて実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/6b4ce9d0-ccd8-2338-a12a-1c429c078c92.png)

実行結果を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/0b8cee2a-76ec-0096-37ea-fc2c672f1e9b.png)
データベースにアクセスし、全件の情報が取得できていることが確認できます。

### レスポンスのJSONの確認
しかしレスポンスを確認すると、不要な属性が含まれていることがわかります。「row」の属性以下をレスポンスとして返すにはどうすればよいでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/7a563333-f81b-da3b-e9f1-349767722fb3.png)

## プロセスの修正（割り当て）ステップ
allunivsの計算式の式を、下記の通り変更します。"//row"を末尾に追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/cad23b68-dc34-10a5-37e0-c12883360951.png)
```diff 
- $output.univ
+ $output.univ//row
```

再度「保存」、「パブリッシュ」し、POSTMANで再実行すると。
大学の情報だけが、JSONの配列として返却されることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/f9e92521-773f-fc06-47a9-3f4969d74355.png)

このように、DASから返ってきた値をそのままレスポンスとして返すのではなく、
CAIのプロセス側で変換し、プロセスのレスポンスとして設定することが可能です。

## 最後に
最後まで記事をご覧いただきありがとうございました。
今後もCAIに関する情報をお届けできればと思います。