Firebase:良い、悪い、素晴らしい.
13790 ワード
導入
私の開発者の1人は、これがフロントエンド開発者である最高の時代であると言いました、そして、これは真実です.そこにはあらゆる種類の偉大なアプリケーションを作るために力を与える技術がありますクリックのカップルと私たちのフロントエンドからそれらを使用する準備が整いました.
今日、我々はこれらのテクノロジー、Firebaseの1つをカバーするつもりです.
Firebaseは何ですか?
FireBaseは、開発者が構築、リリース、およびWeb、Android、およびIOSのアプリを監視するためのツールのセットを提供するGoogleによってバックアップされたサービスプラットフォームとしてバックエンドです.
認証、データベース、ストレージ、リアルタイムデータベース、ホスティング等について話しています.
Firebaseの私の背景
私はFireBaseを使用してアプリケーションを構築していますが、私が建てた2月までの完全な強さではありませんzen 生産性のアプリは自分自身を中心に私のタスクに集中し、Vercel&HasNode Hackathonに参加するのに役立ちます.禅の打ち上げからこのポストの日付まで、私はFirebaseの道具の80/90 %のように使いました、そして、ここで私は私の痛み、私がFirebaseと恋に落ちるようになったものと消化するのが少しより難しくされたものです.
あなたが得るこのポストの終わりに:
良い部品
認証
ほとんどの開発者は認証フローを持つアプリケーションを起動すると思います.FireBaseでは、このプロセスはうれしいと高速です.我々は、匿名のセッションに電子メール、Google、FB、githubからのプロバイダでの署名のための12のオプションがあります.
有効にするには、資格情報を設定し、有効にするをクリックします.
プロジェクトでは、このようにAuthのメソッドにアクセスできます.
export const register = async (email, password) => {
return firebase.auth().createUserWithEmailAndPassword(email, password).catch(reason => {
throw new Error(reason.message);
})
}
export const login = async (email, password) => {
return firebase.auth().signInWithEmailAndPassword(email, password).catch((reason) => {
throw new Error(reason.message);
})
}
そして、最後のステップは、状態変化が認証されたユーザーをセット/解除するとき、聞く. firebase.auth().onAuthStateChanged((user) => {
if (user) {
...
firebaseState.user = user;
}
})
データベース.
私たちは2つのデータベースオプションのFireStoreとリアルタイムデータベースがありますどちらも内蔵のリアルタイム機能を提供します.あなたが他のツールとの機能を実装していたMySQLの背景から来て、これはFireBaseによって心吹きとキラー機能であり、それはチャット、およびコラボレーションツールのようなアプリケーションのオプションに行くことができます.
どちらもSQLドキュメントベースのデータベースです.Firestoreより高度なクエリやルールを提供する強力です.ドキュメントを含むコレクションを作成し、すべてのドキュメントにサブコレクションを作成できます
それはあなたのデータベースのコレクションとドキュメントのアクセスを許可する条件です.ここでは、例えば、ユーザーがそれらのためのタスクを作成し、ユーザがタスクの所有者である場合は削除および更新を許可するように指示しています.
match /tasks/{taskId} {
allow create: if request.auth != null && request.resource.data.user_uid == request.auth.uid;
allow delete, update: if request.auth != null && resource.data.user_uid == request.auth.uid;
}
しかし、あなたは、私は他のユーザーが自分のボードを見ることができるバージョン2.0で共有オプションを必要とする禅で、例えば、より高度なルールを設定することができます.我々はコレクションを保存しましたdocuments/shared/$(userUid)/accounts/${taskOwnerId}
以下の規則は、「私が認証され、タスクが私のものであるか、または私と一緒のユーザ共有ボードに属しているならば、私にタスクを読ませます」と翻訳します.match /tasks/{taskId} {
allow read: if (request.auth != null && resource.data.user_uid == request.auth.uid) || (exists(/databases/$(database)/documents/shared/$(request.auth.uid)/accounts/$(resource.data.user_uid)));
}
関数
すべてがフロントエンドで動作することはできません、サーバーから管理される必要がある機密データがあります.
クラウド関数は、独自のサーバーを維持することの痛みなしでサーバー上のものを実行するFireBase方法です(別名Serverless)彼らは柔軟性があり、他のFirebaseツールと非常によく補完します.Authを使用してユーザーのサインアップの機能をトリガすることができます後、書き込み、更新、FireStoreのドキュメントを削除すると、バックグラウンドでスケジュールされた関数を実行すると、空が制限されます.
バックエンドで定義する関数であるcallables *を持っていて、名前だけでフロントエンドから呼び出すこともできます.必要はありませんAxiosをインストールし、エンドポイントに呼び出しを行う.
exports.shareMatrix = functions.https.onCall(async (data, context) => {
const user = context.auth;
// do stuff with data
return "OK"
})
Defining the cloud function in the backend
...
const shareMatrix = functions.httpsCallable('shareMatrix');
shareMatrix(formData).then(() => {
clearForm()
emit('saved', formData)
})
...
Invoking the function in the frontend
その他のツール。
言及する価値がある他のツールは、ホスティング、記憶と分析です
悪い。
データベース
あなたがリレーショナルデータで働いているならば、あなたは2つのことをすることができますdenormalize your data , 言い換えれば、1つのクエリで推奨される方法で必要なすべての情報を文書を提供するために繰り返すか、またはあなたのデータを取得するために複数のクエリを行うには、すべての情報を格納するために繰り返しています.
Firebaseを使うとき
Firebaseが最良の選択肢でないかもしれないとき
ラッピング
FireBaseは、我々の関数を使用するために必要な-彼らの有料オプションでも低コストでアプリケーションを高速に開発することができます.それはアイデアを検証するための良いオプション、小さなサイドプロジェクトを構築し、私のような場合は、興味深い技術を試して楽しんでいる.
これらの機能が好きなら、以下のような他の選択肢をチェックできます.
Reference
この問題について(Firebase:良い、悪い、素晴らしい.), 我々は、より多くの情報をここで見つけました https://dev.to/jesusantguerrero/firebase-the-good-the-bad-the-awesome-bb1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol