
ラボ 4: エラーハンドリング(オプション)
概要
ラボ2 では、APIを実装しました。 もしかすると、ユニークIDを持つ製品を繰り返し作成しようとして、500エラーが発生したかもしれません。 そのエラーメッセージには、特定のエラーが記述されていません。 このラボでは、エラーを処理する方法を学びます。
ステップ 1: Try スコープの追加
Try スコープを使用すると、Try スコープ内のコンポーネントを実行したときに発生する可能性のあるエラーを処理できます。
今回のケースでは、Product の Product Number は一意です。そのため、挿入を行うとエラーが発生する可能性があります。 エラーの詳細が記載された409ステータスコードを投げることになります。
-
パレットに移動し、Try コンポーネントを検索します。
-
Try コンポーネントを post フローの先頭に配置します。
-
Insertコンポーネントをその中に移動させます。以下のように表示されるはずです。
ステップ 2: エラーのキャッチ
エラーを処理する場合、2 つのオプションがあります。
-
On Error Continue: これにより、エラーがキャッチされますが、フローの実行は継続されます。
-
On Error Propagate: このオプションはエラーをキャッチしたのち、上位にスローします。
エラーの種類に応じて、最終的にはどちらか一方を使うことになります。
今回はエラーを伝播させることにします。
そのために、On Error Propagate ハンドラーをエラー処理部分に追加します。
-
パレットに移動し、On Error Propagate を検索します。 コンポーネントをエラー処理部分内にドラッグ&ドロップします。
Query Execution エラーのみをキャッチするように設定していきます。
-
Error Propagate コンポーネントをクリックして、Type で
DB:QUERY_EXECUTION
と入力します。 ドロップダウンリストから選択することもできます。
ステップ 3: 新しいエラーの発生
次に、DB:QUERY_EXECUTIONメッセージで新しい例外を発生させます。
-
On Error Propagate コンポーネントの中に Raise Error コンポーネントをドラッグ&ドロップします。
-
以下の値を設定します。
Name Value Type
APP:CONFLICT
description
#[error.description]
ステップ 4: 新しいエラーの処理
ここで、APIキットのエラー処理に移動し、409を返すために新しいOn Error Propagateハンドラを追加する必要があります。
-
product-api-mainフローのエラー処理に移動し、新しい On Error Propagate Handler を追加します。
-
クリックして、 Type で
APP:CONFLICT
を設定します。 -
Transformation を追加します。
エラーコードを含むペイロードと httpStatus 変数を返します。
-
ペイロードの設定では、エラーの説明を返しますので、以下のスクリプトをコピーして貼り付けてください:
%dw 2.0 output application/json --- {message: error.description}
また、httpのステータスコードを返すことになりますが、そのためには、次のような変数を作成する必要があります。
-
ボタンをクリックすると、新しいウィンドウが表示されます。
-
ドロップダウンリストから
Variable
を選択し、変数名にhttpStatus
を設定します。 -
スクリプトボックスに
409
を入力します。最後に以下のようなものができます:
ステップ 5: エラーのテスト
-
APIを実行し、既存の product number で"products"に対して POSTをコールして、ステタースコード409を受信することを確認してください。
次のようなものが表示されます。:
指定のproduct が存在しない場合に、更新フローで409を返すようにしてみてください。
Update Product コンポーネントを Try Scope で囲み、以前と同じように例外を発生させます。 |
まとめ
このモジュールでは、以下の手順を完了しました:
さらに進む:
-
詳細は Try スコープ のドキュメントを参照してください。
-
詳細は Raise Error コンポーネント のドキュメントを参照してください。
-
詳細は エラーハンドラ のドキュメントを参照してください。
おめでとうございます! ラボ 4 が完了しました。
モジュール 9 に進んでください。