2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

API Connect のアセンブルでGatewayScript処理を共通化

Last updated at Posted at 2019-06-04

はじめに

API ConnectではAPI毎にパス等の設定や動作(アセンブル)を定義します。
アセンブルでは、ポリシーを1個以上配置し、APIの動作を定義しますが、
GatewayScriptポリシーというJavaScriptライクな言語で処理を実装可能なポリシーが存在します。

今回は、複数のGatewayScriptポリシーで、似たような処理を実装するんだけど、どうやって共通化するんだけっけ? みたいなお悩みにお答えする記事になっています。

環境

IBM CloudのAPI Connectサービスで動作確認しています。

アセンブル定義

今回、下図のアセンブルを定義しました。
このAPIでは、get/trimとget/trim2 の2パスの処理を定義しています。
赤枠のtrim body、trim body2が処理を共通化したいGatewayScriptポリシーです。
assemble.png

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);

プロパティー

さて、このトリム処理を共通化するためには、どうすればよいでしょうか?
答えの一つがプロパティーを利用する方法です。

プロパティーとは固定値をなど定義し、アセンブルから参照させる場合によく利用します。
ここでは、共通化したい処理を関数として定義してしまいます。
図、右下の値フィールドに、コードを記述します。
property.png

ただ、設計ビューでは、コーディングしづらいので、ソースビューを利用することをお勧めします。
今回は、「trimFunction」というプロパティー名で無名関数としてトリム処理を定義しています。
source.png

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個所で出力しますが、それらの処理を共通化する場合に今回の方法が利用できます。

2
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?