NodeJS でRESTサーバを最短で(Salesforceのコールアウトテストサーバ)
Salesforce でほぼ標準の開発環境 sfdx ですが、コレ、nodejs 経由でインストール出来るのですよね。
逆に言うと、nodejs と親和性が高いとも言えます。
そこで、Salesforce のコールアウト(Apex*1 から、Salesforce 外の HTTP リクエストを送信する仕組み)のテスト用サーバをしれっと作ろうというのが今回の課題。
目次
NodeJS で秒殺RESTサーバ
全部デフォルトでOKなのでコマンドを実行
npm init: nodejs のプロジェクトを作成npm install -d express: Nodejs の軽量サーバライブラリインストールnpm install -d compression: レスポンスの圧縮ライブラリ
index.js を作成して
const compression = require('compression');
const express = require('express');
const app = express();
const port = 3000;
app.use(compression());
app.use(express.json());
app.get('/test', (req, res) => {
res.json({ message: 'Welcome to JSON!' });
})
app.use('/', express.static('static'));
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
見たままですね。/test にアクセスすると JSON 応答が返り、それ以外のURLアクセスは static フォルダ内を参照します。
node index.js で起動。
> node index.js Example app listening at http://localhost:3000

ちなみに、ExpressJS の公式サイトは下記です。
ngrok で URL を取得する
上記までだと、ローカルサーバ(というか、自分のPC内サーバ)にとどまってしまって、Salesforce からアクセスできません。
でも公開の為にいちいちサーバ契約してセットアップして…なんてやってられませんよね。
ということで、ngrok を使います。
無料で使えるので登録しませう。
ログインすればこんな感じの画面になります。

ダウンロード+セットアップは画面表示される手順を実行します。
ngrok config add-authtoken XXXXXXXXXXXXXXXXXXXXXXXX
を実行したタイミングで認証ができます。
あとは
> ngrok http 3000

試しにアクセスしてみると

後は Salesforce 側からは URL を指定でアクセスすれば検証に利用できます。
補足
ngrok の料金体系を眺めてみると、実はサービス公開で使うのも全然アリではないかと思う。
というのも、ポートを固定で、しかもサーバ側から制御出来る。
ガチガチに固めたイントラ内から、サービス・アプリだけを公開するというかなりの防御を構築出来るため。
ただライセンス見れば解るが、独自ドメインだったり、URL リザーブ、ロードバランシング等は全て有料なので、あくまで「課金すれば」だけどね。
*1:Salesforce 専用の開発言語