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 専用の開発言語