ニフクラ mobile backendでは認証やデータストア(クラウドデータベース)、ファイルストア(ファイルストレージ)、プッシュ通知など様々な機能があります。そして、サーバーレスで拡張できるスクリプト機能もあります。
しかし、実際のアプリ要件は多彩で、場合によっては他にも様々な機能が望まれます。すべての需要を満たすのは困難な場合もあります。そこで、NCMBのフロントとして動作するプロキシソフトウェアを開発中です。
以前スクリプトを署名なしで実行できる機能を追加したのですが、今回はこれを使ってノーコードサービスであるIFTTTと連携してみました。
追加する機能(予定)
現状は透過的なプロキシ + リアルタイム通知くらいしかありませんが、以下のような機能を実装する予定です。
- 認証をJSON Web Tokenに
- GitHub認証
- ソーシャル認証(標準ではサーバー認証が必要ですが、プロキシだけで認証できるように)
- Webhooks
- 署名なしでデータストア操作
- 全リクエストログ記録
他にもデータストアの集計機能、GraphQL機能なども追加できると便利そうです。なお、Webhooksなどの機能はプロキシ経由でしか実現できませんので注意してください(管理画面で操作しても実行されません)。
IFTTTの設定
今回は新しいツイートがあると、それをNCMBのデータストアに保存する設定をしました。Twitterが更新されたら、Webhookで (プロキシのURL)/script/ifttt.js
をPOSTで呼び出します。
呼び出す際のJSONオブジェクトとして、以下を設定します。Content-Typeは application/json
です。
{
"text": "<<<{{Text}}>>>",
"created": "<<<{{CreatedAt}}>>>"
}
インストール
NCMBMania/ncmb-proxyのリポジトリをクローンします。
git clone git@github.com:NCMBMania/ncmb-proxy.git
ライブラリをインストールします。
npm i
設定の編集
setting.example.yml
をコピーして setting.yml
を作成します。そして、ファイル内にあるアプリケーションキー、クライアントキーをそれぞれお持ちのものに書き換えてください。
no_signatureキーのところに書かれたファイル名は、署名なしで実行できるスクリプトのファイル名になります。今回は ifttt.js
というファイルは署名処理なしで呼び出せます。
ncmb:
applicationKey: YOUR_APPLICATION_KEY
clientKey: YOUR_CLIENT_KEY
script:
domain: script.mbaas.api.nifcloud.com
version: 2015-09-01
no_signature:
- ifttt.js
サーバーを起動
サーバーを起動する際には、以下のコマンドを実行します(まだ開発中なので、開発用サーバーが立ち上がります)。
npm run dev
例えばローカルの場合、 http://localhost:3000
にてサーバーが立ち上がります。
NCMBのスクリプト
今回は受け取った内容をそのままIFTTTクラスにデータ保存します。このスクリプトはifttt.jsとして、POSTメソッドで登録します。
const NCMB = require('ncmb');
const APPLICATION_KEY = 'NCMBのアプリケーションキー';
const CLIENT_KEY = 'NCMBのクライアントキー';
const ncmb = new NCMB(APPLICATION_KEY, CLIENT_KEY);
module.exports = async (req, res) => {
const IFTTT = ncmb.DataStore('IFTTT');
const ifttt = new IFTTT();
for (let key in req.body) {
ifttt.set(key, req.body[key]);
}
await ifttt.save();
res.send({});
}
テストする
実際にツイートして、IFTTTを呼び出します。以下のようなJSONがIFTTTのログに残っています。 <<<
と >>>
はエンコードを行う指定です。
{
"text": "<<<これはテストメッセージです>>>",
"created": "<<<February 24, 2023 at 06:36PM>>>"
}
管理画面でIFTTTクラスが作成されていて、データが登録されていれば完成です。
まとめ
通常のNCMBのスクリプト機能では署名なしの実行ができませんが、プロキシサーバーを使うことで制約を乗り越えられます。
プロキシサーバーを使えばノーコードツールと連携したり、LINEボットなども作成できます。ぜひ試してください。