1
0

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 1 year has passed since last update.

B2C Commerce のその他 Salesforce 製品との接続 - HTTP, FTP, SOAP

Last updated at Posted at 2023-03-30

※ これから記載する事項は、私が所属する会社とは切関係のない事柄です。

今回は「B2C Commerce のその他 Salesforce 製品との接続」シリーズとして B2C Commerce から HTTP, FTP, SOAP を利用して Web サービスと接続する方法について紹介したいと思います。

Cross Cloud (13).jpg

他製品 API

下記の API に関する開発者ヘルプサイトのナビの「Discover」から Salesforce 製品の API 情報を確認できます。

スクリーンショット 2023-03-30 17.48.36.png

接続内容とポイント

  • 接続のタイプとしては 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": "テスト"
}

下記のように画面に表示されるようにします。
スクリーンショット 2023-03-30 14.57.30.png

1. サービス、プロフィール、認証情報の設定

管理 > オペレーション > サービス に遷移して「サービス」タブをクリックし、「新規」ボタンを押すと下記のような入力画面が表示される。今回は profile.httpbin.org という名前を持つサービスプロフィールを作成します。
image (48).png

管理 > オペレーション > サービス に遷移して「認証情報」タブをクリックし、「新規」ボタンを押すと下記のような入力画面が表示される。今回は auth.httpbin.org という名前を持つサービス認証情報を作成します。
この際に Basic 認証に利用する ユーザ(ID)、パスワードを入力します。

image (49).png

管理 > オペレーション > サービス に遷移して「サービス」タブをクリックし、「新規」ボタンを押すと下記のような入力画面が表示される。今回は httpbin.org という名前を持つサービスを作成します。
この際に上記で設定したプロフィール、認証情報を設定します。

image (50).png

2. テストコード

下記のコードで /HttpTest-Show にリクエストがあった際に httpbin.org という名前のサービスを利用してHTTPリクエストを行い、結果をjsonとして返却しています。基本的には createRequest でリクエストを作成し、parseResponse でテキストをオブジェクトに変換して利用します。他の関数については後ほど説明します。(関数についてのヘルプ

HttpTest.js
"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 で返される値を擬似的に利用することができます。
スクリーンショット 2023-03-30 15.15.13.png

今回のコードでモックモードにした場合の結果は下記のようになります。
スクリーンショット 2023-03-30 15.16.29.png

ログの出力

下記のようにサービスに対して「通信ログを有効化」することでログを出力することができます。
スクリーンショット 2023-03-30 15.14.24.png

また、上記のコードの filterLogMessagegetResponseLogMessagegetRequestLogMessage を利用することで下記のようにログを加工することも可能です。
スクリーンショット 2023-03-30 15.10.24.png

他の認証やプロトコルのサンプル

リソース

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?