[CAIレシピ] サービス接続によるREST APIの実行

## はじめに

CAIプロセスでアプリケーション連携を実装する際には、大きく3つの連携方法が用意されています。

- __サービス接続__ ... 任意のREST APIやSQL実行を定義する。更にサービス接続を使用するアプリケーション接続を定義して、CAIプロセスから呼び出す。
- __アプリケーション接続__ ... 特定のアプリケーション(`例. Salesforce, JDBC, AWS S3など`)に特化した接続を定義して、CAIプロセスから呼び出す。
- __IICS内で定義しているアセット__ ... マッピングタスクやTaskflowなど、IICSにて定義しているアセットをCAIプロセスから呼び出す。

この記事ではサービス接続を利用して任意のREST APIを実行するする実装を確認します。

なお、この記事は次の記事の内容を理解していることを前提としています。

- [はじめてCAIを使う際に](https://qiita.com/shunsuzu/private/12b8dbd08a30efa0003a)
- [プロセスの作成と実行(匿名認証と基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)
- [割り当てステップと、各種変数フィールドの利用](https://qiita.com/shunsuzu/private/fae696539cd245828848)

## サービス接続によるREST APIの実行

### サービス接続の定義
次の手順では[プロセスの作成と実行(匿名アクセスと基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)で作成したCAIプロセス __recipe-pca-HelloWorld__ を実行するサービス接続を作成しています。

1. IICSにログインして __アプリケーション統合__ のページに移動、 __新規メニュー__ を選択して __サービスコネクタ__ の作成画面を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/d5c1c407-6c14-d523-26e3-cca65781fba4.png)

1. サービス接続の名前を __recipe-svcConn-svcConnTest__ とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/be01d98a-e203-e468-7218-19b03d132281.png)

1. __アクション__ タブを選択、アクションを追加、アクション名を __getAction__ とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/e12f4a3d-664c-7a80-cb67-82963346c6b0.png)

1. __バインディング__ タブを選択、 URLに[プロセスの作成と実行(匿名アクセスと基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)で作成したCAIプロセス __recipe-pca-HelloWorld__ のサービスURLを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/f4e51846-b7c1-81a3-64bc-bf71150c983d.png)

1. __テスト結果__ タブを選択、__クラウドサーバー__ を利用する設定で __テスト__ を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/1e4e2ee7-07ca-ccf7-c29c-0ffca66b9679.png)
__結果__ が __成功__ となる動作を確認できたら __プロセスオブジェクトの生成__ をクリックします。

1. __プロセスオブジェクト__ タブを選択すると、プロセスオブジェクト __root__ が生成されていることが確認できます。加えて、__フィールド__ タブを選択するとプロセスオブジェクト __root__ のフィールドとして __out__ が定義されていることがわかります(outは[プロセスの作成と実行(匿名アクセスと基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)で作成したCAIプロセス __recipe-pca-HelloWorld__ の出力フィールドの名前です)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/dd3ff959-86e4-6c02-d27a-b9920c1c69c0.png)

1. __出力__ タブを選択、出力フィールドの追加ボタンをクリックして、出力フィールドを次のように設定します(__タイプ=参照__ として、2つ前のステップで生成したプロセスオブジェクト __root__ を __応答全体__ として設定している点がポイントです)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/81675254-524b-e7b7-1370-fd3cf76e3182.png)





1. 作成したサービス接続を __保存__ して __パブリッシュ__ を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/792bdc86-c20c-ad87-a584-e2ebd7751404.png)

### アプリケーション接続の定義
作成したサービス接続は、アプリケーション接続として設定することでCAIプロセスから参照できるようになります。

次の手順ではサービス接続から、アプリケーション接続を作成しています。

1. IICSにログインして __アプリケーション統合__ のページに移動、 __新規メニュー__ を選択して __アプリケーション接続__ の作成画面を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/448de798-6cf4-0df7-f234-e8c4e38bcde4.png)

1. アプリケーション接続の名前に __recipe-appConn-svcConnTest__、__タイプ__ に作成したサービス接続 __recipe-svcConn-svcConnTest__ を指定します。その後、__保存__、__パブリッシュ__ を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/1fd5b8f3-3c60-c79c-018c-67e8d574f9f7.png)

### CAIプロセスの作成

次の手順では作成したサービス接続・アプリケーション接続を利用するCAIプロセスを作成しています。

1. CAIプロセスを次の設定で作成します。
    - 名称を __recipe-pca-processObject__ とする
    - __匿名アクセス__ を許可する
    - __クラウドサーバー__ にデプロイする

1. 出力フィールド __output__ を __タイプ=テキスト__ として定義します。

1. CAIプロセスが次の順に実行されるように各種ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/fd7b4f6f-d453-e2da-e661-afc058b2999a.png)

1. サービスステップを選択して __サービスタイプ=接続__、__接続=recipe-appConn-svcConnTest__、__アクション=getAction__ を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/25bc8e46-6f21-3bea-5e15-76c792be0530.png)
出力フィールドのタイプが、生成したプロセスオブジェクト __root__ となっていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/ad89ac0a-63ba-a388-7b1c-33146a9b2074.png)

1. 割り当てステップを選択して、出力フィールド __output__ に __コンテンツ__ として __getActionOut > out__ を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/2730dec7-d01c-7d8b-5995-5514a3bea667.png)

### CAIプロセスの実行
curlコマンドを例とした動作確認結果です。実行すると[プロセスの作成と実行(匿名アクセスと基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)で作成したCAIプロセス __recipe-pca-HelloWorld__ の実行結果である __Hello World__ が得られる動作を確認します。

```:curlコマンドと実行結果
curl https://<IICS・CAIサーバー>/active-bpel/public/rt/<Org ID>/recipe-pca-svcConnTest

//実行結果
{"output":"Hello World"}
```

CAIプロセスから、サービス接続・アプリケーション接続経由で更にCAIプロセスが呼び出されているため、アプリケーション統合コンソールを表示すると、2つ分のCAIプロセスの実行結果が増えている動作を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/74e60399-f691-8020-0630-252df1da793d.png)

## 参照

- [Qiita - IICS CAIの実装レシピ - マスターページ](https://qiita.com/shunsuzu/private/3d1971ef6e3b993516aa)