這篇主要的內容會是簡單地記錄一下 Firebase Database RESTful API, 所提供的相關內容和使用方式。
Firebase Database
Firebase database 的儲存資料方式是屬於 NoSQL 的方式, 利用一組 key 配對一組 value 的模式來建構資料庫; 而在 Database 的介面中,我們可以清楚地看到資料是以 JSON 的格式呈現。
在 iOS 開發的過程中,如果要使用 Firebase 的相關內容, 可以使用官方所提供的 Firebase iOS SDK; 或是在使用 Python 開發的時候,我會選擇使用官方推薦的 Pyrebase, 那若你目前的開發方式沒有相對應的 SDK 或是 third party 可以使用的話呢? 那麼你就只能一起用 REST API 來完成要做的事情了!
REST API
Firebase 提供了五種 Http method
- GET
- PUT
- POST
- PATCH
- DELETE 其中 GET 和 DELETE 就沒什麼特別好說的,你就是取得一個 JSON 或是刪除一個。
PUT
PUT 就和平常使用 PUT 的方式一樣, 它會把整個 JSON 覆蓋成你目前丟上去的 JSON。
POST
POST 的話就有些不一樣,當你 POST 一個資料到某個 JSON 的時候, 它會自行建立一組 key 並回傳 name 回來。 而你所丟的資料會是那組 key 所對應的 value, 所以簡單來說 POST 就是在做新增物件時使用,且 ID 是由它所建立的。
PATCH
PATCH 則是負責更新內容,它會先找到匹配的 key,再更新其 value; 若沒有找到相對應的 key 的話,則會建立一筆新的 key-value。
如果有其中一個無法使用呢?
若遇到你所使用的開發語言或是瀏覽器等等,無法使用其中一項 method 時; 舉個例子,DELETE 無法使用的話,Firebase 有提供你覆寫 method 的功能, method 使用 POST,而在 header 加上: X-HTTP-Method-Override: DELETE 便可以等同於上述所說的 DELETE。 或是加在 url 裡頭也可以: https://[PROJECT_ID].firebaseio/[JSON_NAME].json?x-http-method-override=DELETE
Firebase ETag
Firebase 也有支援 ETag, 在 header 上加上 X-Firebase-ETag: true,它便會在回傳的 headers 中加上 Access-Control-Expose-Headers = ETag ETag = kmHkuKx9sCx742tosJOV4oH+JBQ= 而我們可以下一次的 request 中,在 header 放上 if-match:[ETAG_VALUE], 伺服器端便會驗證是否可以執行這次的要求; 若最後一次的 ETag 和 if-match 的值相符的話,Firebase 便會回傳 412 Precondition failed。 而 ETag 相關的資訊可以看這邊。
最後
整理完這些資訊後,就可以著手寫一些 database 的存取方法到 Vapor 的專案了!