+
+

ラボ 4: エラーハンドリング(オプション)

概要

ラボ2 では、APIを実装しました。 もしかすると、ユニークIDを持つ製品を繰り返し作成しようとして、500エラーが発生したかもしれません。 そのエラーメッセージには、特定のエラーが記述されていません。 このラボでは、エラーを処理する方法を学びます。

ステップ 1: Try スコープの追加

Try スコープを使用すると、Try スコープ内のコンポーネントを実行したときに発生する可能性のあるエラーを処理できます。

今回のケースでは、Product の Product Number は一意です。そのため、挿入を行うとエラーが発生する可能性があります。 エラーの詳細が記載された409ステータスコードを投げることになります。

  1. パレットに移動し、Try コンポーネントを検索します。

  2. Try コンポーネントを post フローの先頭に配置します。

  3. Insertコンポーネントをその中に移動させます。以下のように表示されるはずです。

    module8 lab2 try flow

ステップ 2: エラーのキャッチ

エラーを処理する場合、2 つのオプションがあります。

  • On Error Continue: これにより、エラーがキャッチされますが、フローの実行は継続されます。

  • On Error Propagate: このオプションはエラーをキャッチしたのち、上位にスローします。

エラーの種類に応じて、最終的にはどちらか一方を使うことになります。

今回はエラーを伝播させることにします。

そのために、On Error Propagate ハンドラーをエラー処理部分に追加します。

  1. パレットに移動し、On Error Propagate を検索します。 コンポーネントをエラー処理部分内にドラッグ&ドロップします。

    module8 lab2 propagate

    Query Execution エラーのみをキャッチするように設定していきます。

  2. Error Propagate コンポーネントをクリックして、TypeDB:QUERY_EXECUTION と入力します。 ドロップダウンリストから選択することもできます。

    module8 lab2 propagate config

ステップ 3: 新しいエラーの発生

次に、DB:QUERY_EXECUTIONメッセージで新しい例外を発生させます。

  1. On Error Propagate コンポーネントの中に Raise Error コンポーネントをドラッグ&ドロップします。

    module8 lab2 raise error
  2. 以下の値を設定します。

    Name Value

    Type

    APP:CONFLICT

    description

    #[error.description]

    module8 lab2 raise error config

ステップ 4: 新しいエラーの処理

ここで、APIキットのエラー処理に移動し、409を返すために新しいOn Error Propagateハンドラを追加する必要があります。

  1. product-api-mainフローのエラー処理に移動し、新しい On Error Propagate Handler を追加します。

  2. クリックして、 TypeAPP:CONFLICT を設定します。

    module8 lab2 api kit propagate
  3. Transformation を追加します。

    エラーコードを含むペイロードと httpStatus 変数を返します。

  4. ペイロードの設定では、エラーの説明を返しますので、以下のスクリプトをコピーして貼り付けてください:

    %dw 2.0
    output application/json
    ---
    {message: error.description}
    module8 lab2 error desc transform

    また、httpのステータスコードを返すことになりますが、そのためには、次のような変数を作成する必要があります。

  5. module8 lab2 add target ボタンをクリックすると、新しいウィンドウが表示されます。

  6. ドロップダウンリストから Variable を選択し、変数名に httpStatus を設定します。

    module8 lab2 add variable menu
  7. スクリプトボックスに 409 を入力します。

    module8 lab2 add variable output

    最後に以下のようなものができます:

    module8 lab2 api kit conflict handlerpng

ステップ 5: エラーのテスト

  1. APIを実行し、既存の product number で"products"に対して POSTをコールして、ステタースコード409を受信することを確認してください。

    次のようなものが表示されます。:

    module8 lab2 409 console

指定のproduct が存在しない場合に、更新フローで409を返すようにしてみてください。

Update Product コンポーネントを Try Scope で囲み、以前と同じように例外を発生させます。

まとめ

このモジュールでは、以下の手順を完了しました:

さらに進む:

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

モジュール 9 に進んでください。

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