ステップ 4.検証とエラー処理の追加

これまでに、API を作成してサードパーティクライアントで HTTP 要求をテストし、API を Exchange にパブリッシュしました。 次は Studio を使用して検証と単体テストを追加します。Studio では、すでに作成されているスキャフォールディングを使用して以下を行います。

  • Validation Module を使用して入力を検証する。

  • 1 つのエラー条件に対してエラーハンドラーを作成する。

ステップ 4.1: 検証

ユーザー入力が API に対して適切であることを保証するための操作を、Validation Module から API 実装に追加します。 作成した API は非常にシンプルであるため、テストもシンプルになります。ペイロードのサイズが許容範囲内であるかどうかをテストします。

Validate size​ 操作を ​hello-world-app​ プロジェクトに追加します。

  1. Studio の ​hello-world-app​ プロジェクトで、​hello-world-api.xml​ がまだ開いていなければ開き、キャンバスの ​[Message Flow (メッセージフロー)]​ タブを表示します。

  2. [Mule Palette (Mule パレット)]​ で、​[Add Modules (モジュールを追加)] > [Validation (検証)]​ を選択して ​[Mule Palette (Mule パレット)]​ にドラッグします。

    Validation Module が選択された [Mule Palette (Mule パレット) のビュー]

  3. 操作のリストから、​Validate size​ を Studio キャンバスにドラッグして、エンドポイントモジュール内の ​Set Payload​ の右にドロップします。

    GET モジュールにドロップされた Validate size

  4. Validate size​ をクリックして ​[General (一般)]​ 設定タブを表示します。

    Validate size の設定タブ

  5. [General (一般)]​ タブで以下の値を設定します。

    1. Value (値)​: [fx]​ ボタンをクリックしてリテラルモードから式モードに変更し、テキストボックス内の文字列の後に ​payload​ と入力します。閉じ括弧は自動的に入力されます。

    2. Min​: 6

    3. Max​: 30

    4. [Error options (エラーオプション)] > [Message (メッセージ)]​: The specified message is either too long or too short.

  6. Studio のメインメニューから ​[File (ファイル)] > [Save All (すべて保存)]​ を選択して、変更内容を保存します。

  7. キャンバス内を右クリックして、​[Run project hello-world-app (hello-world-app プロジェクトを実行)]​ を選択します。

  8. hello-world-app​ がデプロイされたことを示すコンソールメッセージが表示されたら、Advanced Rest クライアントまたは同様のツールを使用して要求を送信します。

    http://localhost:8081/api/greeting

    要求クライアントで、​200 OK​ と ​Today the greeting is Hello.​ が含まれるレスポンスヘッダーが報告されます。これは、​Validate size​ 操作で設定した制限内である場合に予期される動作を示しています。

  9. キャンバスを右クリックして、​[Stop project hello-world-app (hello-world-app プロジェクトを停止)]​ を選択します。

ペイロードが短すぎる場合に検証が正しく機能することをテストするため、デバッガーを使用して、エラーがトリガーされるまで各イベントをステップ実行します。

  1. Studio の ​hello-world-app​ プロジェクトで ​hello-world-api.xml​ を開きます。

  2. Set Payload​ をクリックして、値を ​Hi.​ に設定します。

  3. [Mule Palette (Mule パレット)]​ で ​[Favorites (お気に入り)] > [Logger]​ を選択し、Logger を ​Set Payload​ と ​Validate size​ の間にドラッグします。Logger はデバッグしやすいようにプロセスを停止します。Logger の設定は不要です。

  4. Set Payload​ を右クリックして ​[Add Breakpoint (ブレークポイントを追加)]​. を選択します。

  5. Logger​ と ​Validate size​ で上記の手順を繰り返します。

  6. キャンバスを右クリックして、​[Debug project hello-world-app (hello-world-app プロジェクトをデバッグ)]​ を選択します。[Mule Debug (Mule デバッグ)] パースペクティブを開くように求められたら、​[Remember my decision (私の決定を記憶する)] チェックボックスをオンにして ​[Yes (はい)]​ をクリックします。

    デバッガービューの Studio

  7. Advanced REST クライアントで ​/greeting​ エンドポイントに要求を送信します。

    http://localhost:8081/api/greeting
  8. Studio に戻り、​Set Payload​ が破線で囲まれていることを確認します。

  9. キャンバスで ​Set Payload​ をクリックし、​[Mule Debugger (Mule デバッガー)]​ で ​Set Payload​ ノードを開きます。

  10. Set Payload​ を開いて、ペイロード値が ​Hi.​ の 3 文字であることを確認します。

    Validate size​ 操作は 6 文字以上が必要と設定しているため、これによってエラーがトリガーされます。

  11. デバッガーウィンドウの上に表示されている ​[Next processor (次のプロセッサー)]​ (曲線の黄色い矢印) をクリックします。

    次の切り替えポイントに移動するための [Next processor (次のプロセッサー) コントロール, 500]

    このコントロールにマウスポインターを置くと、​「Next processor (次のプロセッサー) (F6)」​と表示され、正しいコントロールであることを確認できます。デバッガーペインには、Logger Connector が表示されます。

  12. 曲線の黄色い矢印を再びクリックして、​Validate size​ 操作に移動します。

  13. 曲線の黄色い矢印を再びクリックすると、定義したエラーメッセージがデバッガーペインの ​error​ オブジェクトに表示され、破線が ​Validate size​ 操作内に表示されていることを確認できます。

    Validate size のエラーが表示されたデバッガービュー

  14. [Next processor (次のプロセッサー)]​ を再びクリックして、キャンバスにメッセージフローの先頭が表示され、インポート時に追加されたスキャフォールディング項目の 1 つである APIkit ルーターが赤い破線で囲まれていることを確認します。このルーターがエラーを処理します。

  15. [Next processor (次のプロセッサー)]​ を再びクリックしてフローを完了します。プロセスが完了したため、Mule デバッガーペインは空白になります。

  16. Advanced Rest クライアントを確認します。​500 Server Error​ とペイロード値が表示されます。

    ペイロードではなく定義してあるエラーが返されたことを確認するには、いずれかのエラーハンドラーを設定する必要があります。

  17. キャンバスを右クリックして、​[Stop project hello-world-app (hello-world-app プロジェクトを停止)]​ を選択します。

  18. [Window (ウィンドウ)] > [Perspective (パースペクティブ)] > [Open Perspective (パースペクティブを開く)] > [Mule Design (Mule デザイン)]​ を選択してデバッガービューを終了します。

ステップ 4.2: エラー処理を追加する

では、セットアップした検証用のエラーハンドラーを追加しましょう。

  1. Studio の ​[Mule Palette (Mule パレット)]​ で ​[Core] > [On Error Propagate]​ を選択し、このエラーハンドラーを ​get:\greeting:hello-world-app-config​ の ​Error handling​ までドラッグします。

    GET モジュールへのエラーハンドラーの追加と設定

  2. [General (一般)]​ 設定タブで、エラーハンドラーを設定します。

    • Display Name (表示名):​ ​On Error Propagate

    • Type (種別):​ 検索アイコンをクリックして、​VALIDATION:INVALID_SIZE​ を選択します。

    • 他のデフォルト値は変更しないでください。

  3. Set Payload​ 操作を新しい ​On Error Propagate​ エラーハンドラーにドラッグします。

  4. 新しい Set Payload 操作を設定します。

    1. Set Payload​ をダブルクリックして ​[General (一般)]​ タブを開きます。

    2. [Settings (設定)] > [Value (値)]:​ ​payload​ を ​error.description​ に置き換えます。

  5. [File (ファイル)] > [Save All (すべて保存)]​ をクリックして、変更内容を保存します。

  6. Set Payload​、​Logger​、​Validate size​ のブレークポイントを削除してある場合は、これらにブレークポイントを追加します。

  7. キャンバス内を右クリックして、​[Debug project hello-world-app (hello-world-app プロジェクトをデバッグ)]​ を選択します。

  8. アプリケーションがデプロイされたら、Advanced Rest クライアントからクエリ ​http://localhost:8081/api/greeting​ を送信し、曲線の黄色い矢印を使用して各ブレークポイントをステップ実行します。

  9. On Error Propagate​ の ​Set Payload​ に達すると、ペイロードが ​Validate size​ で作成したエラーメッセージに設定されているのを確認できます。

    エラーハンドラー内の Set Payload のデバッガーメッセージ

  10. メッセージフローの ​APIkit Router​ に達すると、元のペイロード ​Hi.​ の代わりにエラーメッセージが表示されます。

    ペイロードのエラーメッセージを表示している APIkit ルーターのブレークポイント

  11. ステップを最後まで実行して Advanced Rest クライアントの応答を確認すると、​500 Server Error​ がエラーメッセージと一緒に返されていることが分かります。

  12. 元のペイロードを ​Today the greeting is Hello.​ に戻します。

  13. Studio のビューを ​[Window (ウィンドウ)] > [Perspective (パースペクティブ)] > [Open Perspective (パースペクティブを開く)] > [Mule Design (Mule デザイン)]​ に戻します。

次に、変更後のアプリケーションをパブリッシュします。

ステップ 4.3: 変更後のアプリケーションをパブリッシュする

改善した API を Exchange で公開します。

  1. Studio の ​Package Explorer​ で、​hello-world-app​ プロジェクトを右クリックします。

  2. [Anypoint Platform] > [Publish to Exchange (Exchange にパブリッシュ)]​ を選択します。

  3. 以前と同じビジネスグループを選択します。有効なビジネスグループを選択するまで、​[Next (次へ)]​ ボタンはアクティブになりません。

  4. バージョン番号は自動的に増分されますので、そのまま受け入れます。

  5. [Project type (プロジェクトタイプ)]​ で ​[Example (サンプル)]​ を選択します。

  6. [Next (次へ)]​ をクリックします。

  7. [Finish (完了)]​ をクリックします。

Exchange に新たにパブリッシュされた API バージョンへの直接リンクが Studio に表示されます。このリンクをコピーすることで、他のユーザーと API を共有できます。

次のステップ

他のユーザーが ​/greeting​ エンドポイントに要求を送信できるように、​API をデプロイ​できるようになりました。

開発者向けの詳細

ユニットテスト、エラー処理、そして検証については、学習することがたくさんあります。 詳細を確認してください。