※ これから記載する事項は、私が所属する会社とは切関係のない事柄です。
今回は「B2C Commerce のその他 Salesforce 製品との接続」シリーズとして B2C Commerce から HTTP, FTP, SOAP を利用して Web サービスと接続する方法について紹介したいと思います。
他製品 API
下記の API に関する開発者ヘルプサイトのナビの「Discover」から Salesforce 製品の API 情報を確認できます。
接続内容とポイント
- 接続のタイプとしては HTTP、HTTP Form、FTP、 SFTP、SOAP、Generic(= カスタムして使う)がある
- デフォルトではBasic認証に対応している
- タイムアウト、レート制限、サーキットブレーカーの設定ができる
- LocalServiceRegistry をコード内で利用してサービスを呼ぶ
- サービスごとに通信状況(平均呼出時間、成功率、失敗率など)を分析できる
接続方法
前提
今回はシンプルに B2C Commerce に /HttpTest-Show
ルートを作成して、 HTTP でリクエストした内容を返してくれる https://httpbin.org にベーシック認証で POST した結果を表示してみたいと思います。
下記のようにリクエストした結果を
REQUEST:
POST /anything
Host: httpbin.org
Authorization: Basic {credentials}
Content-Type: application/json
BODY:
{
"test": "テスト"
}
1. サービス、プロフィール、認証情報の設定
管理 > オペレーション > サービス に遷移して「サービス」タブをクリックし、「新規」ボタンを押すと下記のような入力画面が表示される。今回は profile.httpbin.org
という名前を持つサービスプロフィールを作成します。
管理 > オペレーション > サービス に遷移して「認証情報」タブをクリックし、「新規」ボタンを押すと下記のような入力画面が表示される。今回は auth.httpbin.org
という名前を持つサービス認証情報を作成します。
この際に Basic 認証に利用する ユーザ(ID)、パスワードを入力します。
管理 > オペレーション > サービス に遷移して「サービス」タブをクリックし、「新規」ボタンを押すと下記のような入力画面が表示される。今回は httpbin.org
という名前を持つサービスを作成します。
この際に上記で設定したプロフィール、認証情報を設定します。
2. テストコード
下記のコードで /HttpTest-Show
にリクエストがあった際に httpbin.org
という名前のサービスを利用してHTTPリクエストを行い、結果をjsonとして返却しています。基本的には createRequest
でリクエストを作成し、parseResponse
でテキストをオブジェクトに変換して利用します。他の関数については後ほど説明します。(関数についてのヘルプ)
"use strict";
var server = require("server");
var LocalServiceRegistry = require("dw/svc/LocalServiceRegistry");
function createService() {
return LocalServiceRegistry.createService("httpbin.org", {
createRequest: function (service, body) {
var url = service.getURL() + '/anything';
service.setURL(url)
.setRequestMethod("POST")
.addHeader("Content-Type", "application/json");
return JSON.stringify(body);
},
parseResponse: function (service, response) {
return JSON.parse(response.text);
},
mockFull: function () {
return {
"test": "モックです"
}
},
getRequestLogMessage: function (request) {
return JSON.stringify(request) + '---getRequestLogMessage テスト---';
},
getResponseLogMessage: function (response) {
return JSON.stringify(response.getText()) + '---getRequestLogMessage テスト---';
},
filterLogMessage: function (msg) {
return msg + '---filterLogMessage テスト---';
}
});
}
server.get("Show", function (req, res, next) {
var service = createService()
var result = service.call({
"test": "テスト"
})
res.json(result.object);
next();
});
module.exports = server.exports();
モック
下記のようにサービスのモードをモックに設定すると外部の接続することなく上記のコード内の mockFull
で返される値を擬似的に利用することができます。
今回のコードでモックモードにした場合の結果は下記のようになります。
ログの出力
下記のようにサービスに対して「通信ログを有効化」することでログを出力することができます。
また、上記のコードの filterLogMessage
、getResponseLogMessage
、getRequestLogMessage
を利用することで下記のようにログを加工することも可能です。
他の認証やプロトコルのサンプル
- FTP
- OAuth