第一次接觸到 Firebase 是在一年前,想說寫個 Line_Bot 的遊戲,順便練習 Class 相關用法,不過當時選用的語言是 Javascript,所以使用的架構是 nodeJS,可惜就敗在非同步(Async)、同步(Sync),處理上令人筋疲力盡,到了最後熱忱燃燒殆盡,這次回來之後發現 Firebase 除了原先 Realtime Database 還多了 Cloud Firestore,就讓我們一探究竟吧。
前言
本篇文章會偏向比較應用層面,並不會有太多資料庫的相關說明帶入其中,並且使用 Python 程式語言進行操作。
什麼 Firebase?
Firebase 雲訊息傳遞(FCM),前身為 Google 雲端通訊(GCM),是一項針對 Android、iOS 及網路應用程式的訊息與通知的跨平台解決方案,目前可免費使用。[1] 該服務由Google擁有的Firebase公司提供。Firebase已於2014年10月21日宣布被Google收購,價格未公布。[2]Google 雲端通訊的官方網站現已指向Firebase雲訊息傳遞,視作新版Google 雲端通訊。[wiki]
Realtime Database
Firebase 的基礎服務之一,提供各式各樣的資料儲存,儲存方式比就像是 Json 的模式,從下圖簡單的範例可以粗略了解儲存的形式。
Cloud Firestore
新一代的儲存服務,具備更高性能的運作架構,但目前還是在測試階段,Cloud Firestore 與 Realtime 皆屬個體,資料互不相通,儲存的方式也略有不同,Firestore 儲存的方式為「集合->文件->集合…」。
- 集合: 指向文件。
- 文件: 指向集合,並且可以設置資料欄位。
看文字有點抽象對嗎? 下圖為無聊所寫的 Line_Bot 井字遊戲的資料庫狀態。
Firestore 操作
基礎環境設定
基礎設定包含安裝套件、設置 API_Key。
安裝套件
首先透過 pip 指令來安裝相關的 Python 套件(firebase-admin、google-cloud-firestore)。
$ pip install firebase-admin google-cloud-firestore
獲取 Firebase API_Key
首先至 Firebase 申請專案,並且下載 API_Key,這邊的專案申請我就直接帶過了,透過連結至 Firebase 之後,點擊在「Project Overview」一旁的小齒輪,接著點選「使用者與權限」。
接著在上頭的選單中點選「服務帳戶」,即可看到下方的「產生新的私密金鑰」。
點擊之後會跳出注意事項,確認後下載 API_Key。
接著加入以下程式碼,並將 Json 路徑「’path/to/serviceAccountKey.json’」改為你自己的。
import firebase_admin from firebase_admin import credentials cred = credentials.Certificate('path/to/serviceAccountKey.json') default_app = firebase_admin.initialize_app(cred)
新增
新增資料的方法有兩個。
- 先將字典存入變數再透過 set 方法寫入到資料庫。
- 直接在 set 方法內傳入字典的內容寫入到資料庫。
更新
查詢
刪除
此部分需要注意的是,只能夠單一刪除「文件」,集合不能夠刪除。
如果需要刪除整個集合可以使用下列方法來進行刪除。
原理: 當一個集合底下沒有文件時,集合會自行移除,所以先查詢要刪除的集合內的所有文件名稱,再將文件一一刪除即可,代碼如下。
參考資料:
https://firebase.google.com/docs/admin/setup
https://googlecloudplatform.github.io/google-cloud-python/latest/index.html