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

NCMBのプロキシサーバーを使ってノーコードと連携する

Posted at

ニフクラ 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}}>>>" 
}

0813 ifttt.com - 0224182713.jpg

インストール

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({});
}

0812 console.mbaas.nifcloud.com - 0224172307.jpg

テストする

実際にツイートして、IFTTTを呼び出します。以下のようなJSONがIFTTTのログに残っています。 <<<>>> はエンコードを行う指定です。

{
  "text": "<<<これはテストメッセージです>>>",
  "created": "<<<February 24, 2023 at 06:36PM>>>"
}

0814 ifttt.com - 0224183646.jpg

管理画面でIFTTTクラスが作成されていて、データが登録されていれば完成です。

0815 console.mbaas.nifcloud.com - 0224183655.jpg

まとめ

通常のNCMBのスクリプト機能では署名なしの実行ができませんが、プロキシサーバーを使うことで制約を乗り越えられます。

プロキシサーバーを使えばノーコードツールと連携したり、LINEボットなども作成できます。ぜひ試してください。

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