Horizonとは何ですか?
Horizonは、NoSQL RethinkDBデータベース、コンソールユーティリティ
horizon
(
hz
)、承認とACL、クライアント上のデータベースを
horizon.js
ためのクライアントJSライブラリ
horizon.js
を含む製品です。
つまり、Horizonはシンバックエンドです。データベースと、クエリレベルでのデータベースへのユーザーアクセスルールです。
中身は?
Rethinkdb
コレクションの変更に関する通知を送信できる便利なNoSQLデータベース。 すでにそれについて書いたhabrで:「RethinkDBでリアルタイムのWebアプリケーションを構築します 」。
NoSQL RethinkDBの概要:
- WebSoketを介して変更に関する通知を送信できます(データベースレベルでメールをすぐにフィルタリングできます)
- スケール可能
- 参加できる
- 強力なクエリ言語
- 監視およびデータへの迅速なアクセスのための組み込みのWebインターフェイスを備えています
コンソールユーティリティ
Horizonのインストール後、
horizon
(または
hz
)ユーティリティがすぐに利用可能になります。 その助けを借りて、次のことができます。
- 新しいHorizonアプリケーションの初期化
- Horizonアプリケーション用のWebサーバーの起動
- 開発用のSSL証明書を生成する
- ユーザーのトークンを生成します
- RethinkDBのアップロードまたはアップロードスキーマ
- 古いバージョンから新しいバージョンに移行する
ACL(アクセス制御リスト)
HorizonはすぐにOAuth認証( JSON Web Tokens standard)をサポートし、Facebook、Github、Google、Slack、Twitch、Twitter、Auth0のプロバイダーを使用できます(後者を使用すると、このリストを大幅に拡張できます)。
いくつかのデフォルトのユーザーグループがあります。
- 許可されていません
- 匿名
- 承認済み
- 管理者
グループごとに、各コレクションの読み取り/書き込み要求のホワイトリストを構成できます。 戦闘モードでは、データベースへの各リクエストがこのリストでチェックされ、ルールの1つが正しい場合、リクエストが実行されます。 ルールは、通常のデータベースクエリとワイルドカード機能の組み合わせです。
クエリのサンプルACLルール
許可されていないユーザー、ユーザープロファイルの読み取り:
[groups.unauthenticated.rules.read_profile] template = "collection('users').anyRead()"
許可ユーザーによるプロファイルの読み取り:
[groups.authenticated.rules.read] template = "collection('posts').anyRead()"
ここで
anyRead()
置換関数が使用されることに注意してください。これは、レコードを読み取る機能を意味します。 この関数は実際のクエリでは使用されません。
ユーザープロファイル情報の更新:
[groups.authenticated.rules.upadate_profile] template = "collection('users').upadate({id: userId(), username: any()})"
ここでは、
userId()
と
any()
2つの置換関数が使用されます。
userId()
-現在の許可ユーザーのIDを置き換えます。
any()
-データを置換します。
理論的にはどのように機能しますか? たとえば、データベースにクエリを実行する場合:
update({id: 1, username: 'Bob'})
、データベース側で、すべてのルールがチェックされ、キーがチェックされます。 入力時に、データベースは
id=1
を参照し、ルールに従って、データベースはキー
id=userId()
でオブジェクトを構築し、
1
と
userId()
を比較しようとします。 同じ操作が
username
キーでも発生します:
“Bob”
と
any()
がチェックされます。 2番目の場合、
any()
関数を使用すると、任意のデータをスキップできます。ここでは、入力データに
username
キーが存在することを確認しました。 すべてが順調であれば、リクエストは成功します。
horizon.js
アプリケーションWebサーバーを起動すると、クライアントライブラリ
/horizon/horizon.js
が利用可能になり
/horizon/horizon.js
。 次のことができます。
- RethinkDBデータベースへのWebSoket接続を展開します
- データベースクエリを作成し、コレクションまたはコレクションのリストへの変更をサブスクライブします
- OAuth認証を実行し、現在のユーザーを取得します
ここでメソッドの全リストを見ることができます: horizon.io/api/horizon、horizon.io/api/collection 。
どのように機能しますか?
Horizonがチャットでどのように機能するかを示す公式の例がいくつかあります( React 、 Vue 、 すべての例 )。
ただし、上記の例は投稿への承認とアクセス権の設定を示していないため、Vanillaでのソーシャルフィードの独自の例をまとめました。
展開方法
単純に展開します:
npm install -g horizon hz init hz-app cd hz-app hz serve --dev
インストールのすべてのニュアンスは、 horizon.io / installおよびhorizon.io/docs/getting-startedで確認できます。
誰のため?
この製品は、JavaScriptを熟知しており、バックエンドに時間を費やしたくない人にとって間違いなく魅力的です。 Horizonは、愛好家のプロトタイピングに最適です。
アプリケーションの領域について話すと、Horizonはおそらく興味深いでしょう。
- モバイルアプリ/ゲーム開発者
- PhoneGapアプリケーション開発者
- インタラクティブなSPAアプリケーション(チャット、フォーラム)を作成するには
結論
長所
- インストールと開始は非常に簡単です。
- シンプルで明確なドキュメント
- クリアAPI
- コレクション/集計クエリの更新を購読する
- WebSoket
- 製品は動的に開発されています
短所
- 成功例はありません。
- 十分に若く、多くの情報や問題は解決されていない
- 古いブラウザのサポートについて質問がありますか?
バランスで
プロトタイピングとクイックスタートに適した製品です。 便利なデータベースアクセスAPI。 レコードへのアクセスを設定することができます。 HTTPSと保護、スケーリングに多くの注意が払われています。 しかし、Horizonが実際にどのように機能するかは明確ではありません。成功した例はありません。 しかし、プロジェクトが多くの星と肯定的なレビューを集めることに成功したことは明らかです。 たぶん、本番で試してみるべきですか?
» Horizonウェブサイト: horizon.io
» Github: github.com/rethinkdb/horizon
» Horizon英語ビデオ: www.youtube.com/watch?v=ajb_IeXcVw4
読んでくれてありがとう!