+
+

ラボ 2: Order Fulfillment APIを実装し、プロセス層の API を作成

概要

注文を処理するためのバックエンドシステムを編成してみましょう。注文をOrder APIに送信します。

module10 lab2 api overview

実装はいくつかのステップで構成されています。

  1. 前のラボで生成したOrder Fulfillment API スタブを拡張します。

  2. Scatter Gatherなどのフローコントロールを使用して、このプロセスAPIのオーケストレーションを実行します。

  3. Order API を呼び出して Order を作成します。

  4. ユーザデータを取得するためにCustomer APIを呼び出します。

  5. DataWeave変換を使用して、システムAPIリクエストから集約されたプロセスAPIレスポンスメッセージを構築します。

  6. Anypoint StudioからプロセスAPIを含むMuleアプリを実行してテストします。

ステップ 1: プロセスAPIのPOSTフローを設定

まず、post:\order_fulfillment:application\json:order-fulfillment-api-config バックエンド・フローを実装します。

  1. Anypoint Studioのフローダイアグラムに戻り、post:\order_fulfillment:applicationjson:order-fulfillment-api-config というフローから、Transform Messageをクリックします。

    module10 lab2 studio update transform
  2. Transformコンポーネントを削除し、scatter gatherを追加します。

    module10 lab2 studio scatter gather
    Scatter-Gather は、複数のターゲットに同時にリクエストメッセージを送信します。 すべてのルートからの応答を収集し、1つのメッセージに集約します。

ステップ 2: 設定ファイルの作成

設定ファイルを使用して、プロジェクトの設定を簡単に行えるようにしたいと思います。 そのために、このラボで使用するプロパティを設定した yaml ファイルを作成します。

  1. メニューより File → New → File へ移動します。

    module10 lab2 new file
     Enter or select the parent folder:api-order-fulfillment/src/main/resources フォルダを選択し、 File name:configuration.yaml とします。

    api-order-fulfillment/src/main/resources フォルダに作成されていることを確認してください。

    module10 lab2 new file config
  2. Finish を押します。

  3. 次の値をコピーして貼り付けます。

    system:
      api:
        host:
          customers: mythical-customer-api-v4-0.cloudhub.io
          orders: mythical-order-api-v4-1.us-e1.cloudhub.io

    YAMLを使う利点の1つは、1つのYAMLファイル内の情報を複数の言語タイプに簡単に翻訳できることです。

  4. api.raml ファイルで、Global Elements タブに移動します。

    module10 lab2 global elements tab
  5. Create ボタンを押します。

    module10 lab2 global elements create
  6. Configuration でフィルタし、 Configuration properties を選択します。

    module10 lab2 global elements config
  7. OK を押します。

  8. Fileプロパティを configuration.yaml という値で完成させます。

    module10 lab2 configuration panel
  9. OKを押します。

ステップ 3: Order API - Connectorの使用

REST API モデリング言語(RAML)を定義に使用している Order API を呼び出すことから始めます。 RAML仕様を作成してExchangeに公開するたびに、新しいコネクタが生成されます。このモジュールをプロジェクトに追加する必要があります。

Exchange の API 定義を確認して、Order API をプレビューします。

  1. Exchange Icon をクリックします。

    module10 lab2 exchange button

    必要に応じて自分の資格情報でログインします。

  2. 組織名で「Order API」を検索します。

    module10 lab2 exchange order api search
  3. Order APIをクリックして、APIポータルを探索します。

    module10 lab2 api console order api
  4. POSTメソッドのリクエストとレスポンスボディの仕組みを詳しく見てみましょう。

    module10 lab2 order request
    module10 lab2 order response
  5. Add to project をクリックします。

  6. 警告のポップアップウィンドウが表示されますので Proceed を押します。

    module10 lab2 proceed

    インポートが成功したことを知らせるウィンドウが表示されます。

    OK を押すと、Order API モジュールがパレットで使用できるようになります。

    module10 lab2 order api palette
    コネクタのバージョンが変わることがありますが最新のバージョンであることを確認してください。
  7. ドラッグ&ドロップで Order API から Create order を配置します。

    module10 lab2 studio create order
  8. コネクタをダブルクリックして、プロパティを表示します。Mule Properties View に、構成するコンポーネントのプロパティが表示されます。

  9. module10 lab2 add button アイコンをクリックして、以下のように新しい設定を作成します。:

    module10 lab2 studio api order config add
  10. リクエスト設定の完成

    • Host: mythical-order-api-v4-1.us-e1.cloudhub.io

    • Port: 80

    • Base Path: /api

    • Protocol: HTTP

      Host の値はconfiguration.yamlファイルで設定できるので、${system.api.host.orders}とすることもできます。

      Response timeout の値が10000(ミリ秒単位)であることに注目してください。つまり、このAPIへのすべての呼び出しのタイムアウトは10秒です。必要に応じてこの値を調整してください。

      module10 lab2 order api config
      プロトコルを確認してください。デフォルトでは HTTPS となっていますが、今回のサービスは HTTP です。
  11. OK をクリックします。

  12. General セクションでは、以下のパラメータを設定します:

    • Create order request data: #[payload]

    • Client id: 11def1b704e24d87a5ea5769772c90a7

    • Client secret: 88845E529f1F42E4a5aC96Fd504c3e01

    • Content type: application/json

    • Accept: application/json

      設定は以下のようになるはずです:

      module10 lab1 call order api completed

      module10 lab2 transform button をクリックして、フィールドごとのマッピングを行います。

  13. Create order request data: ボックスからpayloadを削除し、 {} を追加します。

  14. Refresh Metadata ボタンを押します。

    module10 lab2 create order request
  15. module10 lab2 transform button ボタンをクリックしして、RAML Consumersの入出力メッセージを変換します。

  16. Order Fulfillment APIのPOST呼び出しのフィールドを、Order APIのPOST呼び出しに必要なフィールドにマッピングします。次のDataWeaveスクリプトをDataWeaveコードエディタに貼り付けます。:

    {
    	customerId: payload.customer_id,
    	orderLineItems: (payload.products default []) map ( product , indexOfProduct ) -> {
    		productId: product.id,
    		quantitySafetyStock: product.quantity,
    		quantitiyOnHand: product.quantity,
    		productName: product.productName
    	},
    	status: payload.status,
    	totalPrice: payload.price as String
    }
  17. マッピングは以下のように表示されるはずです。

    module10 lab2 studio dw mapping view
     module10 lab2 done buttonボタンを押します。

    元のペイロードを変更したくないので、Order Idを変数に保存します。

    Create Order の設定にいない場合は、コネクタをクリックしてその設定にフォーカスします。

  18. Advance タブに移動します。

    module10 lab2 order advance
  19. 以下のデータで表を完成させます:

    • Name: Expression Value

    • Target Variable: order_id

    • Target Value: #[payload.id]

      ExchangeでAPI仕様を確認したので、出力が判ります。また、OutputタブからPayloadツリーで確認することもできます。

      module10 lab2 output payload
    module10 lab2 studio dw mapping view java
  20. コンポーネントパレットで "Business" を検索します。

    module10 lab2 studio palette business
  21. Connectorコンポーネントの後に、Custom Business Event コネクタをキャンバスにドラッグ&ドロップします。

    module10 lab2 studio flow business event
  22. Custom Business Event アイコンをダブルクリックして、そのプロパティを表示します。Mule Properties View に、設定するコンポーネントのプロパティが表示されます。

  23. Display Name(表示名)」と Event Name(イベント名)フィールドに、Order Created Eventのように、操作が判る名前を追加します。

  24. Key Performance Indicators セクションで、module10 lab2 add button をクリックして、以下のKPIを追加します:

    • Name: Expression Value

    • Order id: #[vars.order_id]

    • Order Price: #[payload.price]

    • Customer ID: #[payload.customer_id]

    • Order Status: #[payload.status]

    module10 lab2 studio business event config

ステップ 4: Customer API - Connectorの使用

次に、Customer API を呼び出して、顧客に関する追加情報を取得します。ここでもプロジェクトに REST connector を追加します。 この場合、Get By ID リソースを使用します。

  1. Exchange のポータルを見て、Customer API をプレビューします。

    module10 lab2 api console customer
  2. Customers → GET に移動し、レスポンスを見てみましょう。

    module10 lab2 customer response
  3. Add to project ボタンをクリックします。

  4. Order API Connectorをインポートするために行ったのと同じ手順となります。

    最後に、Customer API モジュールがパレットで使用できるようになります。

    module10 lab2 customer api palette
    コネクタのバージョンが変わることがありますが最新のバージョンであることを確認してください。
  5. Customer API コネクタから Get customer by id をドラッグ アンド ドロップします。

    module10 lab2 customer by id
  6. コネクタをダブルクリックして、プロパティを表示すると、Mule Properties View に設定するコンポーネントのプロパティが表示されます。

  7. module10 lab2 add button アイコンをクリックして、図のように新しい設定を作成します:

    module10 lab2 customer api config
  8. Customer API で使用する HTTP 構成を定義します。

  9. 次の値を入力してください:

    • Host: mythical-customer-api-v4-0.cloudhub.io

    • Port: 80

    • Base Path: /api

    • Protocol: HTTP

      Host の値はconfiguration.yamlファイルで設定できるので、${system.api.host.customers}とすることもできます。

      Response timeout の値が10000(ミリ秒単位)であることに注目してください。つまり、このAPIへのすべての呼び出しのタイムアウトは10秒です。必要に応じてこの値を調整してください。

      module10 lab2 studio http params customer
  10. OK をクリックします。

  11. General セクションでは、以下のパラメータを設定します:

    • Name: Expression Value

    • Id: #[payload.customer_id]

    • Client id: 11def1b704e24d87a5ea5769772c90a7

    • Client secret: 88845E529f1F42E4a5aC96Fd504c3e01

    • Content Type: application/json

    • Accept: application/json

      設定は以下のようになるはずです:

      module10 lab2 customer api completed
  12. 最後に、Scatter-Gather の後に Transform Message コンポーネントを追加してAPIレスポンスを構築します。

  13. Transform Message コンポーネントをダブルクリックします。

  14. 以下のDataweaveスクリプトを貼り付けます。

    %dw 2.0
    output application/json
    ---
    {
    	order_id: vars.order_id as Number,
    	username: payload."1".payload.name default ""
    }

    このラボの目的はDataWeaveの詳細を説明することではありませんが、Scatter-Gather の後にペイロードの配列を作成します。 payload."0".payload というのは、最初のブランチからのペイロードから値を取得していることを意味します。

    最終的には以下のようなフローとなるはずです。

    module10 lab2 final flow

ステップ 5: APIの実行

それでは、Anypoint Studio でAPIを実行して、どのように連携して動作するかを確認してみましょう。

  1. 前のラボで行ったように、アプリケーションを起動します。(アプリケーションを右クリックし、Run As > Mule application 選択します。

  2. Anypoint Studioで API Console View が開いたら、リンクをクリックします。

    module10 lab2 api console order fulfillment
  3. リクエストボディへ移動し、 Send ボタンをクリックします。

    module10 lab2 api console post button fulfillment

    Accept ヘッダーの値に application/json が選択されていることを確認してください。

  4. リクエストが処理されると、200 番のレスポンスコードとAPIのJSONレスポンスが表示されるはずです。

    module10 lab2 api console post success response

    404 レスポンスが返ってくることがあります。これは、そのユーザーIDが存在しないことを意味します。

まとめ

このラボでは

  • Anypoint Studioを使用して、Order Fulfillment Stubを実装してプロセスAPIレイヤーを完成させました。

  • Scatter-Gatherフロー・コントロールとRAML Consumerオブジェクトを構成して、注文と顧客システムAPIをオーケストレーションしました。

  • DataWeaveを使用して、システムとAPIのレスポンスを管理し、目的の結果セットを生成します。

  • RAMLコンシューマからのライブAPIコールを使用して、システムAPIレイヤを横断するプロセスAPI実装をテストしました。

詳細はこちらをご覧ください:

おめでとうございます! ラボ 2が完了しました。

ラボ 3に進んでください。

Submit your feedback!
Share your thoughts to help us build the best workshop experience for you!
Take our latest survey!