API Connect のアセンブルでGatewayScript処理を共通化
はじめに
API ConnectではAPI毎にパス等の設定や動作(アセンブル)を定義します。
アセンブルでは、ポリシーを1個以上配置し、APIの動作を定義しますが、
GatewayScriptポリシーというJavaScriptライクな言語で処理を実装可能なポリシーが存在します。
今回は、複数のGatewayScriptポリシーで、似たような処理を実装するんだけど、どうやって共通化するんだけっけ? みたいなお悩みにお答えする記事になっています。
環境
IBM CloudのAPI Connectサービスで動作確認しています。
アセンブル定義
今回、下図のアセンブルを定義しました。
このAPIでは、get/trimとget/trim2 の2パスの処理を定義しています。
赤枠のtrim body、trim body2が処理を共通化したいGatewayScriptポリシーです。
GatewayScript(共通化前)
今回のtrim bodyおよびtrim2 bodyには、例として、「APIレスポンスのトリム処理」を実装します。
// get http body
var httpBody = apim.getvariable('message.body');
// trim
Object.keys(httpBody).forEach(function(key) {
var value = httpBody[key];
if (typeof(value) == 'string') {
httpBody[key] = value.replace(/ +$/g, '');
}
});
// set http body
apim.setvariable('message.body', httpBody);
プロパティー
さて、このトリム処理を共通化するためには、どうすればよいでしょうか?
答えの一つがプロパティーを利用する方法です。
プロパティーとは固定値をなど定義し、アセンブルから参照させる場合によく利用します。
ここでは、共通化したい処理を関数として定義してしまいます。
図、右下の値フィールドに、コードを記述します。
ただ、設計ビューでは、コーディングしづらいので、ソースビューを利用することをお勧めします。
今回は、「trimFunction」というプロパティー名で無名関数としてトリム処理を定義しています。
GatewayScript(共通化後)
プロパティーを利用したGatewayScriptポリシーのコーディングは、以下の通りです。
$(trimFunction)で、プロパティーから関数を取得しています。
// get http body
var httpBody = apim.getvariable('message.body');
// trim
var trimFunction = $(trimFunction);
trimFunction(httpBody);
// set http body
apim.setvariable('message.body', httpBody);
最後に
今回は、プロパティーに共通化したい処理を関数として定義し、複数のGatewayScriptポリシーで利用する方法をご紹介しました。
GatewayScriptを利用するシーンとしては、アクセスログを出力するケースが挙げられます。
アクセスログは、開始時、終了時の2個所で出力しますが、それらの処理を共通化する場合に今回の方法が利用できます。
Author And Source
この問題について(API Connect のアセンブルでGatewayScript処理を共通化), 我々は、より多くの情報をここで見つけました https://qiita.com/yo24/items/9eb9927cb87d0bfee4f0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .