8

おそらく私の質問は次のように言い換える必要があります: Firebase が優れている CRUD にこれらの動作をリファクタリングするにはどうすればよいですか?

CRUD がうまく機能していることがわかります。また、Firebase の宣言型セキュリティ モデルを使用すると、サーバー側で適切なセキュリティを確保できることもわかりました。

サブスクリプションサービスがあるとしましょう。ユーザーがサービスにサインアップするたびに、自動的に「期日」の項目が自分のアカウントに追加される必要があります。簡単な言葉で:

/users/john
/services/goodstuff

johnにサインアップできます。私goodstuffは彼を 30 日間支払いなしで受け入れることができますが、30 日が経過すると、「ねえ、支払う必要があります。そうしないと、グッズのサブスクリプションが失われます」と彼に思い出させます。

サーバー バックエンドを使用POSTして/services/goodstuff/members、たとえば、POSTハンドラーの一部で のアカウントに「借りている」という項目を追加し、借りているとマークされずにjohn誰も参加できないようにします。goodstuff

これらのサーバー側のロジックが存在しない Firebase BaaS アプリでは、アプリをリファクタリングして同じ効果的な動作を得るにはどうすればよいでしょうか?

4

1 に答える 1

6

更新 (2017 年 3 月 10 日) :以下に概説するアーキテクチャはまだ有効であり、Firebase を既存のインフラストラクチャと組み合わせるために使用できますが、Firebase はCloud Functions for Firebase をリリースしました。 Firebase イベント (データベースの変更、ユーザーのサインインなど)。

考えられる解決策の 1 つ (未テスト、申し訳ありませんが、正しい考えである必要があります):

{
  "rules": {
    "users": {
      "$user": {
        /* When they create their user record, they must write a 'due' that's
         * within the next 30 days. */
        ".write": "!data.exists() && newData.child('due').isNumber() && newData.child('due').val() < now + (30*24*60*60*1000)"
      }
    },
    "services":
      "$service": {
        /* Must be authenticated and due date must not be passed. */
        ".read": "auth != null && now < root.child('users/' + auth.id + '/due).val()" 
      }
    }
  }
}

これにより、誰かが初めてログインしてユーザー/エントリを初期化するときに、次の 30 日以内に期日を記入する必要があります。そして、サービスにアクセスすると、その期限が過ぎていないことが確認されます。

とはいえ、別のオプションは、この種のビジネス ロジックを処理するために小さなバックエンド サービスをスピンアップすることです。Firebase は、データの保護、保存、同期に優れています。しかし、複雑なビジネス ロジックがある場合は、小さなバックエンド プロセスをスピンアップすることを検討することをお勧めします。Firebase にはNode.JSおよびJVMクライアントだけでなくREST APIもあるため、Firebase と統合する独自のバックエンド コードを非常に簡単に実行できます。

于 2013-07-28T16:39:18.230 に答える