2019/9/25 追記
DataPower Playgroundはサンセットしてしまいました。。
はじめに
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で試してみます。
サンプルコード
他にも書き方は色々あると思いますが、ここでのコード例は以下の通りです。
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);
実行結果
Log画面にDataPowerのシステムログが表示されます。ここでコードに書いたように、変換前のヘッダと、変換後のヘッダが出力されています。
クライアントIDヘッダをつけずにリクエストしてみます。Request画面で先ほどのクライアントIDヘッダをremoveしてTestをクリックします。
まとめ
以上でDataPower Playgroundを使って気軽にGatewayScriptのコードを試すことができることがわかりました。
なお注意点としてはAPI ConnectのAPI managerのアセンブルで使えるモジュールのapim.custom.jsはここでは使えません(なのでAPICコンテキスト変数は使えません)。
あくまでDataPower単体でのGatewayScriptという位置付けになります。
参考
- https://developer.ibm.com/datapower/datapower-playground/
- https://www.ibm.com/developerworks/community/blogs/de2b7f3e-30c5-4172-be0f-2640ebb55d13/entry/DataPower_Playground_execute_GatewayScript_in_your_browser?lang=en
- https://github.com/ibm-datapower/datapower-playground
- https://developer.ibm.com/recipes/tutorials/api-connect-customising-http-headers-for-client-id-and-secret/