api
apiconnect
gatewayscript
datapower

DataPower PlaygroundでGatewayScriptを試す

はじめに

DataPower Playgroundは、DataPowerユーザーがGatewayScript開発学習を気軽にするためのクラウド環境とのことです。IBM Cloud上にDataPowerがホスティングされているようです。サンプルコードも色々提供されていますし、APIリファレンスも充実しています。
無償で気軽にコードを試せるというメリットがありつつ、時折「昨日は動いてたのに、今日は502 Bad Gateway♥」なんて時もあります。そこは無償ゆえのサービスレベルと割り切って使うのが良いかと思います。

試したシナリオ

API Connect v5.0.8.xでは、APIに対してクライアントIDをヘッダにつけてリクエストする場合、X-IBM-Client-Idという固定のヘッダで受け付けるという制限事項があります。とはいえベンダー名がもろに出てるヘッダを使いたくないというケースもあります。例えばX-Client-Idを使いたいと言った場合、一旦そのヘッダでリクエストを受け付けてDataPowerでそれをX-IBM-Client-Idに変換することで乗り切ることができます。
そこで必要となるコード例をPlaygroundで試してみます。

サンプルコード

他にも書き方は色々あると思いますが、ここでのコード例は以下の通りです。

GatewayScript.js
var hm = require('header-metadata');
var sm = require('service-metadata');
var log = session.name('log') || session.createContext('log');

var clientId = hm.current.get('x-client-id');
console.info(hm.current.headers);

if (clientId) {
    log.setVar('clientId', clientId);
    hm.current.remove('x-client-id');
    hm.current.set('x-ibm-client-id', clientId);
} else{
    hm.response.statusCode = '401';
    session.output.write("You need Client ID");
    console.log(hm.response.statusCode);
    return;
}

session.output.write(hm.current.headers);
console.info(hm.current.headers);

実行結果

  1. Code画面にコードをコピペします。
    Kobito.EcfU6Z.png

  2. Request画面でx-client-idヘッダと値をAddして、Testをクリックします。
    Kobito.E680hW.png

  3. Response画面にクライアントに返る結果が表示されます。
    Kobito.SsMl11.png

  4. Log画面にDataPowerのシステムログが表示されます。ここでコードに書いたように、変換前のヘッダと、変換後のヘッダが出力されています。
    Kobito.kGfrh5.png

  5. クライアントIDヘッダをつけずにリクエストしてみます。Request画面で先ほどのクライアントIDヘッダをremoveしてTestをクリックします。
    Kobito.VJRHN1.png

  6. 以下のようなエラーとなります。
    Kobito.1lgcyV.png

  7. Response画面には設定したメッセージが出ます。
    Kobito.MiQ1MJ.png

  8. Log画面には設定したエラーコードが出力されます。また4で出力されていたクライアントIDヘッダは当然出力されません。
    Kobito.1EH2vI.png

まとめ

以上でDataPower Playgroundを使って気軽にGatewayScriptのコードを試すことができることがわかりました。
なお注意点としてはAPI ConnectのAPI managerのアセンブルで使えるモジュールのapim.custom.jsはここでは使えません(なのでAPICコンテキスト変数は使えません)。
あくまでDataPower単体でのGatewayScriptという位置付けになります。

参考