技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

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 の公式サイトは下記です。

expressjs.com

ngrok で URL を取得する

上記までだと、ローカルサーバ(というか、自分のPC内サーバ)にとどまってしまって、Salesforce からアクセスできません。
でも公開の為にいちいちサーバ契約してセットアップして…なんてやってられませんよね。

ということで、ngrok を使います。

ngrok.com

無料で使えるので登録しませう。
ログインすればこんな感じの画面になります。

ダウンロード+セットアップは画面表示される手順を実行します。

ngrok config add-authtoken XXXXXXXXXXXXXXXXXXXXXXXX

を実行したタイミングで認証ができます。
あとは

> ngrok http 3000

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

後は Salesforce 側からは URL を指定でアクセスすれば検証に利用できます。

補足

ngrok の料金体系を眺めてみると、実はサービス公開で使うのも全然アリではないかと思う。
というのも、ポートを固定で、しかもサーバ側から制御出来る。
ガチガチに固めたイントラ内から、サービス・アプリだけを公開するというかなりの防御を構築出来るため。

ただライセンス見れば解るが、独自ドメインだったり、URL リザーブ、ロードバランシング等は全て有料なので、あくまで「課金すれば」だけどね。

*1:Salesforce 専用の開発言語