ニフクラ mobile backendでは認証やデータストア(クラウドデータベース)、ファイルストア(ファイルストレージ)、プッシュ通知など様々な機能があります。そして、サーバーレスで拡張できるスクリプト機能もあります。
しかし、実際のアプリ要件は多彩で、場合によっては他にも様々な機能が望まれます。すべての需要を満たすのは困難な場合もあります。そこで、NCMBのフロントとして動作するプロキシソフトウェアを開発中です。
このプロキシを使うことによって、小さなニーズはプロキシ側で実装できるようになります。今回はプロキシを使ったデモアプリを紹介します。
追加する機能(予定)
現状は透過的なプロキシ + リアルタイム通知くらいしかありませんが、以下のような機能を実装する予定です。
- 認証をJSON Web Tokenに
- GitHub認証
- ソーシャル認証(標準ではサーバー認証が必要ですが、プロキシだけで認証できるように)
- 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
にてサーバーが立ち上がります。
デモ
デモサーバーを https://ncmb.moongift.dev で立ち上げてあります。これを実際に使っているデモをこちらに立ち上げています。
このデモアプリでは以下のような機能を確認できます。
ドメインを変更した動作
NCMBの初期化を以下のように変更しています。これで接続先のサーバーを変更できます。また、アプリケーションキーとクライアントキーはサーバー側にありますので、完全に隠蔽できます。
const fqdn = "ncmb.moongift.dev";
const ncmb = new NCMB("dummy", "dummy", {
fqdn,
scriptFqdn: fqdn,
});
リアルタイム通知
WebSocketを使った通知も利用できます。URLは同じです。
const socket = new WebSocket(`wss://${fqdn}?classname=Test&action=create`);
socket.addEventListener('open', e => {
log(`WebSocketに接続しました`);
});
パラメータの指定はニフクラ mobile backendを拡張するNCMBプロキシを開発中です(リアルタイム通信) - Qiitaを参照してください。
今回はアクションをcreateとしていますので、データを作成した際にイベント通知されます。
socket.addEventListener('message', e => {
log(e.data);
});
送られてくるデータは以下のような文字列です。
{
"action":"create",
"objectId":"PWLaZ1SfI5KYRBA6",
"createDate":"2022-10-26T11:23:41.199Z"
}
まとめ
プロキシサーバーを使うことで、キーを隠蔽できたり、リアルタイム通信などの追加機能が利用できます。NCMBをより便利に使いこなすために、ぜひご利用ください。