LoginSignup
4
1

More than 5 years have passed since last update.

IBM API Connect V5.0.8.3 Catchエラーの追加

Last updated at Posted at 2018-09-26

概要

IBM API Connectのアセンブリでは、その処理においてエラーが発生した場合にCatchを構成する事で、エラー発生時の挙動をカスタマイズできます。

API Connect V5.0.8.3以降で、ハンドリングできるエラーが追加されています。ここでは、追加された例外の中で、UnauthorizedErrorの挙動を確認してみたいと思います。

アセンブリでサポートされるエラーの一覧

以下が、アセンブリでサポートされるエラーの一覧になります。

例外 概要          備考      
ConnectionError 別の URL との接続を確立する際にエラーが発生しました。
JavaScriptError ポリシー内で JavaScript または GatewayScript を実行中にエラーが発生しました。
PropertyError アクションが設定、追加、クリアされていない状態で、set-variable ポリシーの呼び出し中または実行中に、正しくないプロパティーが原因でエラーが発生しました。
RedactionError redact ポリシーの一部としてフィールドを編集する際にエラーが発生しました。
TransformError transformation ポリシーの実行中にエラーが発生しました。
RuntimeError 上記以外の指定されていないエラーが発生しました。
BadRequestError An error occurred while trying to access the request. V5.0.8.3 以降
UnauthorizedError The API cannot be invoked based on the client ID and/or client secret provided, or id/secret were specified in the wrong location. V5.0.8.3 以降
ForbiddenError The application making the API request has been disabled or is not active. V5.0.8.3 以降

UnAuthorized Errorの構成と実行例

UnAuthorizedError Catchを構成してAPI Callをしてみます。
API定義のアセンブリ画面で、Catchを表示します。
UnAuthorizedError Catchを追加し、GatewayScriptポリシーを配置します。
image.png

このGatewayScriptポリシーでは、例として以下のように、ステータスコード、エラーメッセージを設定します。

var obj = {
    "status"  : "UnauthorizedError Catch ",
        "message" : "Response Message"
};
apim.setvariable('message.status.code', '401');
apim.setvariable('message.headers.content-type', 'application/json');
apim.setvariable('message.body', obj);

このような構成をしたAPIを公開し、実際に、クライアントIDの指定を間違えて、APIを呼び出してみます。

  • クライアントIDが間違っている場合

curl -i -H "x-ibm-client-id: 3b530653-19f6-4ae0-b727-2a5a87776e8" https://api.au.apiconnect.ibmcloud.com/xxxxx-apic/sb/simple/current
HTTP/1.1 401 Unauthorized
(中略)
content-type: application/json

{"status":"UnauthorizedError Catch ","message":"Response Message"}

  • クライアントIDの指定場所が違う場合

curl -k -i https://api.au.apiconnect.ibmcloud.com/xxxxx-apic/sb/simple/current?client_id=3b530653-19f6-4ae0-b727-2a5a87776e8e
HTTP/1.1 401 Unauthorized
(中略)
content-type: application/json

{"status":"UnauthorizedError Catch ","message":"Response Message"}

これにより、クライアントID、クライアントシークレットの値や指定方法が間違った場合のエラーメッセージや挙動をカスタマイズできます。
従来は、DataPower拡張などでの対応が必要でした。

参考までに、catchを構成しない場合のエラー時の応答例は、以下になります。

参考情報

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1