IICS(CAI)のチュートリアルを試してみる(Order Management 後編)
はじめに
データアナリティクス事業本部のkobayashiです。
Informatica Intelligent Cloud Services(以降、IICS)はオンプレミスおよびクラウド環境に置かれているデータサービスとアプリケーションサービスを統合するiPaaS(integration Platform as a Service)製品です。
IICSの機能の一つであるInformatica Cloud Application Integration(以降、CAI)ではAPIをGUIの操作で簡単に構築することができます。
前回は顧客が商品を注文しその注文を処理するAPIを途中まで作成しましたので今回はその続きを実施し、APIを完成させます。
作成しているAPIのチュートリアル
前回のおさらい
Informatica Cloud Application Integration - Tutorial:Order Management に記載されている内容を実践しました。
作成しているAPIの特徴は以下の通りです。
- リクエストの値を取得して後続の処理で扱う
- 外部APIと連携して値を外部APIに送りそのレスポンスを後続の処理で扱う
- エラーハンドリングを行う
- 複数のプロセスを作成し、一方から他方のプロセスをサブロセスとして呼び出す
- IICSのAPI Managerを使って本番環境でのAPIのデプロイ
エラーハンドルに関しては前々回まででも扱いましたので、新しく行うこととしては「サブプロセス」と「APIのデプロイ」になります。
- サブプロセス
- その名の通りプロセス中で他のプロセスを呼び出す仕組みになります。プロセスを再利用できる細かい単位で作成してそれを組み合わせてメインプロセスを作ると言った使い方になります。
- API Manager
- CAIで作成したプロセスをAPI化し、公開する機能になります。またAPIのゲートウェイを提供したりAPIの監視や分析を行えます。
- 顧客が注文する
- 注文管理プロセス内でインベントリを取得する
- 注文プロセス内でマージンと販売コミッションを計算する
- 顧客とベンダーに確認メール
の順番でAPIを作成していきます。 前回までで1−3を作成したので続きの「顧客とベンダーに確認メール」を作成するところから始めます。 また、最終的にAPI Managerを使って本番環境でAPIのデプロイを行います。
注文管理プロセスの作成
電子メールを送信する外部APIをサービスコネクタとして登録
Informaticaで用意してくれている電子メールを送信する外部APIをサービスとして登録します。
使うサービスはEmail_Service service を使います。
手順1) サイドメニューから新規
を選択するとモーダルが表示されるのでその中からサービスコネクタ
>Swaggerからの作成
を選択し、作成
を押下する。
手順2) サービスコネクタの設定値を入力し次へ
を押下する。
- Swagger URL :
https://na1.ai.dm-us.informaticacloud.com/active-bpel/rt/Email_Service?swagger
を入力 - 認証の使用 : チェックする
- ユーザー名:
testuser2
を入力 - パスワード:
password2#
を入力
- ユーザー名:
手順3) サービスコネクタで使用できる操作が表示されるが、特に設定を変更する必要はないので次へ
を押下してサービスコネクタを作成する。サービスコネクタが作成したあとにパブリッシュを行う。
手順4) 次にプロセスで使うためにサービスコネクタのアプリケーション接続を作成する。これは先の手順で作成したサービスコネクタをどのランタイム環境で実行するのかを設定する。
サイドメニューから新規
を選択するとモーダルが表示されるのでその中からアプリケーション接続
を選択し、作成
を押下します。
手順5) アプリケーション接続の設定値を入力し保存
を押下して設定を保存する。アプリケーション接続を作成したあとにこちらもパブリッシュを行う。
- タイプ : 手順3で作成したサービスコネクタを選択
- 実行 : 実行したいランタイム環境を選択
- hostNmae:
na1.ai.dm-us.informaticacloud.com:443
を入力 - username:
testuser2
を入力 - password:
password2#
を入力
電子メール送信のプロセスの新規作成
手順1) サイドメニューから新規
を選択するとモーダルが表示されるのでその中からプロセス
を選択し、作成
を押下する。
手順2) プロセスの作成画面デザイナーが表示され開始
と終了
のステップが用意されているのでこれを編集する。
手順3) APIへのアクセス制御を行うために開始
を左下から押下する。
*今回は特にアクセス制御をしないため匿名アクセスを許可
を選択します。本番で運用する場合は十分な制御を行ってください。この解説は別途エントリで行う予定です。
手順4) リクエストで送られた値を使うので入力フィールド
を左下から押下する。リクエストとして受け取りたいフィールドを以下の様に設定する。
名前 | タイプ | 必須 |
---|---|---|
EmailAddress | テキスト | チェック |
Message | テキスト | チェック |
手順5) 次にプロセス内で使用する変数を指定するために一時フィールド
を左下から押下する。
名前 | タイプ |
---|---|
EmailDetail | タイプをさらに表示 を選択 -> カテゴリ で定義された接続タイプ を選択 -> 作成したアプリケーション接続を選択 -> Email-Service -> Email_ServiceRequest |
手順6) デバッグ用にプロセス処理中のログを全て記録するために詳細
を左下から押下し、トレースレベルで詳細
を選択する。
手順7)割り当て
ステップをドラッグ&ドロップする。割り当てのタブを選択してアクションの設定を行う。
フィールド | タイプ | 開始 |
---|---|---|
EmailDetail > SendTo | フィールド | EmailAddress |
EmailDetail > Message | フィールド | Message |
手順8)サービス
ステップをドラッグ&ドロップし、電子メール送信を行うアクションを設定する。サービスのタブを選択してアクションの設定を行う。
サービスタイプ
:接続
を選択接続
: 先に設定したEmail-Service
を選択アクション
:Email_ServiceOperation
を選択
手順9)入力タブを選択し、body
の値
でフィールド
> EmailDetail
を選択する。
ここまでで、電子メールを送信するプロセスができました。図の赤枠部分になります。
ではここで作成した電子メールプロセスをメインの注文管理プロセスに追加します。
電子メール送信プロセスをサブプロセスとして注文管理プロセスに追加する
手順1)注文管理プロセスを開き、並列パス
ステップをドラッグ&ドロップする。
まずは顧客に送る確認メールを送信する設定を行います。
手順2)サブプロセス
ステップを並列パスから出ている上のパスにドラッグ&ドロップし、サブプロセス
タブを選択し、プロセス
で電子メール送信プロセスを選択する。
手順3) 送信するメールの内容を設定するために入力フィールド
を左下から押下する。
名前 | 値 | |
---|---|---|
EmailAddress | コンテンツ | 顧客メールを送りたいメールアドレス |
Message | 計算式 | fn:concat ("Dear ", $input.CustomerName , ". Thanks for ordering.", "Your order ID is: ", $output.OrderID , ". We will deliver your order in 7 days.") |
次にベンダーに送る確認メールを送信する設定を行います。
手順4)サブプロセス
ステップを並列パスから出ている下のパスにドラッグ&ドロップし、サブプロセス
タブを選択し、プロセス
で電子メール送信プロセスを選択する。
手順5) 送信するメールの内容を設定するために入力フィールド
を左下から押下する。
名前 | 値 | |
---|---|---|
EmailAddress | コンテンツ | ベンダーメールを送りたいメールアドレス |
Message | 計算式 | fn:concat ("Order has been accepted. The order ID is: ",$output.OrderID , ". Please note below details for your records.", " Overall Profit: ", $output.Calculate_Margin_ServiceResponse[1]/MarginBeforeCommission ,". SalesCommission: ",$output.Calculate_Margin_ServiceResponse[1]/SalesCommission,". Profit after Commission: ", $output.Calculate_Margin_ServiceResponse[1]/MarginAfterCommission ) |
これで注文管理プロセスに電子メール送信プロセスの追加が終わり全プロセスの完成です。
それでは一度リクエストを送ってレスポンスを受け取ってみます。
curl "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxxxxxxxxxxxxxxxxx/p_order_management?CustomerName=TestConsumer&CustomerEmail=testconsumer@mailinator.com&ItemName=item1&ItemCount=2"
レスポンス
{ "status": "オーダーを受け付けました。", "OrderID": "501576050621657088", "ItemPrice": 50.0, "OrderPrice": 100.0 }
この様にレスポンスが返ってくることが確認できます。
別のリクエストとして商品が無い注文のリクエストを送ってみます。
curl "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxxxxxxxxxxxxxxxxx/p_order_management?CustomerName=TestConsumer&CustomerEmail=testconsumer@mailinator.com&ItemName=Newitem1&ItemCount=2"
レスポンス
{ "error": { "code": 500, "detail": { "reason": "{}", "code": "HTTP_400" }, "message": "{}" } }
商品が無いと上のようなレスポンスの内容もエラーの内容となっています。またこの場合は確認メールも届きません。 これに対応するため、注文管理プロセス内でエラーハンドリングをします。
注文管理プロセス内のエラーハンドリングを行う
手順1)注文管理プロセスを開いてgetInventoryDetail
を選択し、フォルト処理
タブを選択してフォルトの取得
をチェックする。
手順2)getInventoryDetail
から出ている上のパスに今まで作成したステップをドラッグ&ドロップする。
手順3)下のパスに割り当て
ステップをドラッグ&ドロップし、割り当てのタブを選択してアクションの設定を行う。
フィールド | タイプ | 開始 |
---|---|---|
status | コンテンツ | 在庫がないため注文が行えません。 |
これでエラーハンドリングができたので先程エラーとなったリクエストを送ってみます。
curl "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxxxxxxxxxxxxxxxxx/p_order_management?CustomerName=TestConsumer&CustomerEmail=testconsumer@mailinator.com&ItemName=Newitem1&ItemCount=2"
レスポンス
{ "status": "在庫がないため注文が行えません。" }
先程設定したメッセージがリクエストで返ってくることが確認できます。
本番環境へ注文管理プロセスのAPIをデプロイする
手順1)IICSのメニューからAPI Manager
を選択する。
手順2)APIレジストリから注文管理プロセスを選択し、右のメニューから管理対象APIの作成
を選択する。
手順3)モーダルが開くのでそのまま作成
を押下する。
手順4)管理対象APIの作成
が終わると図のようにアクティブ
となる事を確認する。
これで本番環境のAPIとしてリクエストを遅れるようになります。APIのエンドポイントは右のメニューを再び選択しURLのコピー
を選ぶとAPIのエンドポイントがコピーされるのでこれを使ってリクエストを送ってみます。
curl "https://apne1-apigw.dm1-ap.informaticacloud.com/t/xxxxxxxxxxxxxxxxxxxxxxxxx.com/p_order_management?CustomerName=TestConsumer&CustomerEmail=testconsumer@mailinator.com&ItemName=item1&ItemCount=2"
レスポンス
{ "status": "オーダーを受け付けました。", "OrderID": "501581849683144704", "ItemPrice": 50.0, "OrderPrice": 100.0 }
まとめ
注文管理のAPIを作成することで
- リクエストの値を取得して後続の処理で扱う
- 外部APIと連携して値を外部APIに送りそのレスポンスを後続の処理で扱う
- エラーハンドリングを行う
- 複数のプロセスを作成し、一方から他方のプロセスをサブロセスとして呼び出す
- IICSのAPI Managerを使って本番環境でのAPIのデプロイ
を行いました。サブプロセスを使ってプロセスを再利用できる細かい単位で作成してそれを組み合わせてメインプロセスを作ることがCAIを使ってAPIを作るコツになると感じました。
最後まで読んで頂いてありがとうございました。