ニフクラ mobile backendでは認証やデータストア(クラウドデータベース)、ファイルストア(ファイルストレージ)、プッシュ通知など様々な機能があります。そして、サーバーレスで拡張できるスクリプト機能もあります。
しかし、実際のアプリ要件は多彩で、場合によっては他にも様々な機能が望まれます。すべての需要を満たすのは困難な場合もあります。そこで、NCMBのフロントとして動作するプロキシソフトウェアを開発中です。
このプロキシを使うことによって、小さなニーズはプロキシ側で実装できるようになります。今回は個人的に欲しかった「署名なしでのスクリプト実行」について解説します。
追加する機能(予定)
現状は透過的なプロキシでしかありませんが、以下のような機能を実装する予定です。
- 認証をJSON Web Tokenに
- GitHub認証
- ソーシャル認証(標準ではサーバー認証が必要ですが、プロキシだけで認証できるように)
- WebSocket(リアルタイム通信)
- Webhooks
- 署名なしでデータストア操作
- 全リクエストログ記録
他にもデータストアの集計機能、GraphQL機能なども追加できると便利そうです。なお、Webhooksなどの機能はプロキシ経由でしか実現できませんので注意してください(管理画面で操作しても実行されません)。
インストール
NCMBMania/ncmb-proxyのリポジトリをクローンします。
git clone git@github.com:NCMBMania/ncmb-proxy.git
ライブラリをインストールします。
npm i
設定の編集
setting.example.yml
をコピーして setting.yml
を作成します。そして、ファイル内にあるアプリケーションキー、クライアントキーをそれぞれお持ちのものに書き換えてください。
applicationKey: YOUR_APPLICATION_KEY
clientKey: YOUR_CLIENT_KEY
サーバーを起動
サーバーを起動する際には、以下のコマンドを実行します(まだ開発中なので、開発用サーバーが立ち上がります)。
npm run dev
例えばローカルの場合、 http://localhost:3000
にてサーバーが立ち上がります。
スクリプトの指定
setting.yml
の中に、 no_signature
キーがあります。ここに配列として、スクリプトのファイル名を記述していくと、そのファイル名へのアクセスは署名処理なしで実行されます。HTTPメソッドは関係ありません。
ここで指定されていないスクリプトは署名処理必須なのでご注意ください。
script:
domain: script.mbaas.api.nifcloud.com
version: 2015-09-01
no_signature:
- YOUR_SCRIPT.js
スクリプト実行
スクリプトの実行は http://localhost:3000/script/YOUR_SCRIPT.js
のように実行します。このファイルはサーバーサイドで実行した結果を表示するものになります。つまり、HTMLの中で <script>
タグで書いたとしても、利用できます。
用途について
例えばLINEボットなどのチャットボットでの利用が考えられます。他にも、Webhookを外部システムから受け取る場合にも利用できるでしょう。
注意点
現時点ではレスポンスがテキストに限定されるはずです。バイナリファイルを返すレスポンスの場合、エラーや狙い通りの動作をしない可能性があります。
まとめ
NCMBの署名処理は安全にサービスを使う上で必要なものですが、外部サービス連携を行う場合には署名処理がない方がスムーズな場合もあるでしょう。そうした時にはこのプロキシサーバーが役立つはずです。