IICS(CAI)のチュートリアルを試してみる(Calculator編)

2020.11.02

はじめに

データアナリティクス事業本部のkobayashiです。

Informatica Intelligent Cloud Services(以降、IICS)はオンプレミスおよびクラウド環境に置かれているデータサービスとアプリケーションサービスを統合するiPaaS(integration Platform as a Service)製品です。

IICSの機能の一つであるInformatica Cloud Application Integration(以降、CAI)ではAPIをGUIの操作で簡単に構築することができます。

前回は一番シンプルなAPIを作成しました。

今回も公式のチュートリアルを実践してみたいと思います。今回行うのはリクエスト値を使って四則演算を行い結果をリクエストとして返すAPIを作成します。

四則演算を行うAPI(calculator)の作成

基本的にはInformatica Cloud Application Integration - Tutorial:Calculator に記載されいている内容を実践していきます。

今回作成するAPIの特徴は以下の通りです。

  • リクエストの値を取得して後続の処理で扱う
  • 外部APIと連携して値を外部APIに送りそのレスポンスを後続の処理で扱う
  • エラーハンドリングを行う

リクエスト値は前回でも扱いましたので、外部APIを使う所とエラーハンドルを行う点が大きな変更点となります。作成手順としては以下になります。

  1. サービスコネクタで外部サービスを作成する
  2. サービスコネクタのアプリケーション接続を作成する
  3. APIプロセスを作成する

では早速作っていきます。

外部APIをサービスコネクタとして登録

四則演算を行う機能はCAIでも実装できますが、このチュートリアルでは外部APIを使うことが目的なので外部APIコネクタを作成します。

使うサービスはCalculator Web Service を使います。このサービスはAdd,Divide,Multiply,Subtractで四則演算を行ってくれます。

手順1) IICSにログインしてアプリケーション統合を選択し、サイドメニューから新規を選択するとモーダルが表示されるのでその中からサービスコネクタ>WSDLからの作成を選択し、作成を押下する。

手順2) サービスコネクタの設定値を入力し次へを押下する。

  • WSDL URL : http://www.dneonline.com/calculator.asmx?WSDL を入力
  • 認証の使用 : チェックしない

手順3) サービスコネクタで使用できる操作が表示されるが、特に設定を変更する必要はないので次へを押下する。

手順4) 次にプロセスで使うためにサービスコネクタのアプリケーション接続を作成する。これは先の手順で作成したサービスコネクタをどのランタイム環境で実行するのかを設定する。

サイドメニューから新規を選択するとモーダルが表示されるのでその中からアプリケーション接続を選択し、作成を押下します。

手順5) アプリケーション接続の設定値を入力し保存を押下して設定を保存する。

  • タイプ : 手順3で作成したサービスコネクタを選択
  • 実行 : 実行したいランタイム環境を選択

ここまででプロセスから外部サービスを呼び出す設定ができたので、API本体のプロセスを作成します。

プロセスの作成

次にリクエストの値を外部APIへ中継し、外部APIからレスポンスから受け取ってその結果をレスポンスとしてクライアントへ返すプロセスを作成します。

手順1) サイドメニューから新規を選択するとモーダルが表示されるのでその中からプロセスを選択し、作成を押下する。

手順2) プロセスの作成画面デザイナーが表示されて図のように開始終了のステップが用意されているのでまずはこれを編集する。

開始ステップを選択し、左下のメニューより全般を押下します。名前の欄に今回作成するAPIプロセス名を入力します。これがエンドポイント名にもなります。今回はp_calclatorとしています。

手順3) APIへのアクセス制御を行うために開始を左下から押下する。

*今回は特にアクセス制御をしないため匿名アクセスを許可を選択します。本番で運用する場合は十分な制御を行ってください。この解説は別途エントリで行う予定です。

手順4) リクエストで送られた値を使いますのでまずは入力フィールドを左下から押下るす。リクエストとして受け取りたいフィールドを以下の様に設定する。

名前 タイプ
NumberA 整数
NumberB 整数

手順5) 次にAPIで返すレスポンスを指定するために出力フィールドを左下から押下し、レスポンスとして返したいフィールドを以下の様に設定する。

Quotientのタイプのみテキストとなっていますが、これは除算の際に0で割った場合にエラーになってしまいますのでその際のエラーメッセージを返すためにテキストにしています。

名前 タイプ
Sum 整数
Difference 整数
Product 整数
Quotient テキスト

手順6) 次にプロセス内で扱う変数を設定するために一時フィールドを左下から押下し、フィールドを以下の様に設定する。

名前 タイプ
add_input タイプをさらに表示を選択 -> カテゴリ定義された接続タイプを選択 -> 作成したアプリケーション接続を選択 -> Add_ATを選択
subtract_input タイプをさらに表示を選択 -> カテゴリ定義された接続タイプを選択 -> 作成したアプリケーション接続を選択 -> Subtract__ATを選択
multiply_input タイプをさらに表示を選択 -> カテゴリ定義された接続タイプを選択 -> 作成したアプリケーション接続を選択 -> Multiply_ATを選択
divide_input タイプをさらに表示を選択 -> カテゴリ定義された接続タイプを選択 -> 作成したアプリケーション接続を選択 -> Divide_ATを選択
fault テキスト

手順7) デバッグ用にプロセス処理中のログを全て記録するために詳細を左下から押下し、トレースレベルで詳細を選択する。

手順8) デザイナのステップの中から割り当てステップ(図の赤矢印)をドラッグ&ドロップで開始終了ステップの間に配置する。

設置した割り当てステップを選択し、左下の割り当てを押下します。フィールドでアプリケーション接続(外部API)にリクエストで送られた値を送るように指定します。

フィールド タイプ 開始
add_input > intA フィールド NumberA
add_input > intB フィールド NumberB
subtract_input > intA フィールド NumberA
subtract_input > intB フィールド NumberB
multiply_input > intA フィールド NumberA
multiply_input >intB フィールド NumberB
divide_input > intA フィールド NumberA
divide_input > intB フィールド NumberB

手順9) リクエストで送られた値を使って四則演算を行うために並列パスを使用する。

左の並列パスステップを手順8で作成した割り当てと終了の間にドラッグ&ドロップします。左下の並列パスから押下して、パスを四則演算様にパス0からパス3までを作成します。

手順10) 4つの並列パス上にサービスステップをドラッグ&ドロップし、それぞれ四則演算を割り当てる。

4つのサービスの名前をそれぞれ加算減算乗算除算に変更しサービスステップをそれぞれ以下の様に変更します。

サービス サービスタイプ 接続 アクション
加算 接続 作成したアプリケーション接続を選択 Add
減算 接続 作成したアプリケーション接続を選択 Subtract
乗算 接続 作成したアプリケーション接続を選択 Multiply
除算 接続 作成したアプリケーション接続を選択 Divide

手順11) 除算は割る数であるNumberBに0が入った場合にエラーになってしまうのでこれをケアするためにフォールト処理を追加する。

左下のフォールトを押下し、フォールトの取得をチェックすると図のようにフォールト処理が行えるパスが作成されます。

フォールト処理としてフォールトが発生した場合に他の演算を待機するため、2秒待機し2秒後に一時変数のfaultフィールドYesの値が入るようにします。

手順12) フォールトのパスに待機割り当てステップを設定し以下の設定を行う。

ステップ プロパティ 内容
待機 待機 待機時間を2秒に設定
割り当て 割り当て フィールド : faultコンテンツ開始

手順13) フォールトで起きた場合に処理を分岐させるために、並列パスの終端と終了の間にディシジョンステップを入れ処理を分岐さる。分岐の条件として一時フィールドのfaultを使い、中身がYesの場合にフォールト処理に応じたレスポンスを返す処理を行う。

手順14) 分岐したそれぞれのパス上に割り当てステップを設置して処理が正常の場合と失敗の場合でレスポンスの値を分けて設定する。

  • ディシジョンが次の値に等しいYes -> 処理失敗のステップ
フィールド タイプ 開始
Sum フィールド AddResponse > AddResult
Difference フィールド SubtractResponse > SubtractResult
Product フィールド MultiplyResponse > MultiplyResult
Quotient テキスト 失敗

処理失敗の場合は除算の結果として文字列で失敗をレスポンスとして返す

  • もしくは -> 処理成功のステップ
フィールド タイプ 開始
Sum フィールド AddResponse > AddResult
Difference フィールド SubtractResponse > SubtractResult
Product フィールド MultiplyResponse > MultiplyResult
Quotient テキスト DivideResponse > DivideResult

長くなりましたが以上でAPIプロセスは出来上がりました。全体像は以下の様になります。

APIプロセスをパブリッシュしてリクエストを送ってレスポンスを確かめてみます。

APIエンドポイントにリクエストを送ってみる(正常系)

curl -X POST "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxx/p_calclator" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"NumberA\": 20, \"NumberB\": 4}"

レスポンスとして以下が返ってきます。

{
  "Sum": 24,
  "Difference": 16,
  "Product": 80,
  "Quotient": "5"
}

APIエンドポイントにリクエストを送ってみる(異常系)

curl -X POST "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxx/p_calclator" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"NumberA\": 20, \"NumberB\": 0}"

レスポンスとして以下が返ってきます。除算の結果に失敗の文字列が入っていることが確認できます。

{
  "Sum": 20,
  "Difference": 20,
  "Product": 0,
  "Quotient": "失敗"
}

まとめ

IICSのCAIでAPIを作成しました。

  • リクエストの値を取得して後続の処理で扱う
  • 外部APIと連携して値を外部APIに送りそのレスポンスを後続の処理で扱う
  • エラーハンドリングを行う

の要素を含むAPIを作成してみましたが少し手の込んだ処理をしているのでプロセスも複雑になりますが処理フローがそのままGUIで表現されているのでとてもわかりやすいのではないかと思います。

最後まで読んで頂いてありがとうございました。