ウェブサービスにおけるデータマッピングにおけるHTTPエラーの処理

外部のWebサービスからの情報を含むデータ統合プロジェクトでは、リモートデータを取得する際にHTTPエラーが発生する可能性があります。特に、データマッピングが自動的に制御されている場合、エラーが非常にまれに発生するとしても、エラーを検出し、報告することが重要です。

MapForceのデータマッピング機能は、Webサービスへの呼び出しを含み、その結果を直接ファイルやデータベースに出力したり、他の入力データと組み合わせてさらに処理を行うことができます。最終的な出力形式に関わらず、REST Webサービスのリクエスト中にHTTP Webサービスのエラーが発生すると、マッピング処理に問題が生じる可能性があります。

MapForceには、マッピング処理を単に中断するのではなく、HTTPエラーを処理するための機能が備わっています。開発者は、REST Webサービスへの呼び出しにおいて、HTTPステータスコードに基づいて例外を処理し、レポートするための設定を行うことができます。

例を見てみましょう。

MapForceに付属するサンプルデータ変換には、実用的なREST Webサービス変換である「AirportStatus.mfd」が含まれています。この変換は、米国連邦航空局が提供するWebサービスを呼び出し、主要なアメリカの空港における運航遅延に関する情報を提供します。この変換の入力は、3文字の空港コードであり、これがWebサービスに提供されます。そして、結果はJSONファイルとして返されます。以下に、この変換とサンプル結果を示します。

HTTPエラーが発生した場合、マッピング処理は失敗します。

MapForceのヘルプファイルには、REST Webサービスの応答に対する条件付き処理に関する説明が含まれています。HTTPエラーを処理する部分を既存のマッピングに単純に貼り付けることはできますが、HTTPエラーが発生した場合に結果を検証する方法はありません。FAAのWebサービスに、テストのために意図的にHTTPエラーを発生させることはできません!

代わりに、httpstat.usというウェブサービスを利用して、さまざまなHTTPステータスコードとそれに対応する説明を生成し、別のデータマッピングでテストを行うことができます。例えば、ブラウザでhttps://httpstat.us/200にアクセスすると、「200 OK」と表示されます。また、https://httpstat.us/400にアクセスすると「400 Bad Request」と表示され、このように、定義されているすべてのステータスコード(最大524まで)に対して同様の結果が得られます。

このサービスに対してRESTリクエストをMapForceで実行するには、新しいマッピングファイルを開き、ツールバーにある「Webサービスの挿入」ボタンをクリックするだけで実現できます

これにより、「Webサービス呼び出し設定」ダイアログが開かれ、ここで設定を手動で構成できます。特定のステータスコードの代わりにパラメータを使用することで、さまざまな値を簡単にテストできます。

以下に、コードパラメータを供給するための定数を用いた対応表を示します

デフォルトでは、Webサービス機能は200から299の範囲にある通常のHTTPレスポンス値のみをサポートしています。他のコードをサポートするには、レスポンスの「Body」要素を右クリックし、「レスポンス構造」ダイアログを開き、許容されるステータスコードの範囲を拡張することができます

RESTリクエストの結果を、decode-mime-entity関数を使ってシンプルなテキストファイルに変換することができます。Webサービスがレスポンスヘッダーに文字コードの値を指定していないため、デコード関数に定数値「utf-8」を接続します。

これで、MapForceのマッピング画面下部にある「出力」ボタンを使って、マッピングを実行し、その結果を確認することができます

マッピング画面で入力定数を変更し、再度実行することで、その違いを確認することができます

結果と他の情報を組み合わせて、より使いやすいステータスメッセージを作成するために、concat関数を使用することができます

様々なHTTPステータスコードでマッピングをテストし、結果に満足したら、既存のAirportStatus.mfdマッピングに、コピー&ペースト操作によってHTTPエラー処理を追加できます。 まず、通常の範囲を超えるレスポンスコードを処理するために、AirportStatusマッピングに新しいレスポンスボディを作成します。 Webサービスのレスポンス側の「Body」項目を右クリックし、「新しいBodyノードを追加」を選択することで、新しいBodyノードを追加できます。

これにより、新しいボディが追加され、「レスポンス構造」ダイアログが開きます。このダイアログでは、299より大きいすべてのHTTPステータスコードに対する処理を指定します

これで、エラー処理定義のマップ構成要素をテストマップからコピーし、AirportStatusマップに貼り付け、新しいレスポンスボディを接続することができます

現在、このマッピングは複数の出力に対応するように定義されています。MapForce上で手動で実行する場合、ユーザーは出力の一つを選択します。しかし、マッピングがMapForce Serverによる自動制御下、または定期的にスケジュールされたFlowForce Serverのジョブで実行される場合、HTTPエラーの処理に関する実行パスの値が明確になります。例えば、自動データマッピングによって、30分ごとに50の空港の状況を報告することができます。

自動実行中には、すべてのデータマッピングの出力パスが処理されます。ウェブサービスが各入力に対して一度だけ呼び出されるように、中間コンポーネントが最終的なターゲットにマッピングする前に、ウェブサービスの実行結果を捕捉します。HTTPエラーが発生した場合、日付、時刻、および正確なHTTPステータスコードが記録されます。

REST Web Servicesにおけるデータマッピングにおいて、HTTPエラーの処理は、シートベルトや消火器のように、非常に役立つものですが、使い続けることを願うものではありません!

MapForceを初めてご利用になる場合は、こちらの紹介動画をご覧ください。また、MapForceを実際に試していただくために、30日間の無料トライアルをご用意しております。