使用 Cloud Firestore REST API

雖然使用 Cloud Firestore 最簡單的方法是使用其中一個原生用戶端程式庫,但在某些情況下,直接呼叫 REST API 仍是相當實用的做法。

REST API 很適合用於下列用途:

  • 從資源受限的環境 (例如物聯網 (IoT) 裝置) 存取 Cloud Firestore,因為這類環境無法在執行完整的用戶端程式庫。
  • 自動管理資料庫或擷取詳細的資料庫中繼資料。

如果您使用gRPC 支援的語言,請考慮使用 RPC API 而非 REST API。

驗證及授權

Cloud Firestore REST API 會接受 Firebase 驗證 ID 權杖或 Google Identity OAuth 2.0 權杖來進行驗證。您提供的權杖會影響要求的授權:

  • 使用 Firebase ID 權杖來驗證應用程式使用者發出的要求。對於這類要求,Cloud Firestore 會使用 Cloud Firestore 安全性規則判斷要求是否已獲授權。

  • 使用 Google Identity OAuth 2.0 權杖和服務帳戶來驗證來自應用程式的要求,例如資料庫管理要求。對於這類要求,Cloud Firestore 會使用 Identity and Access Management (IAM) 判定要求是否已獲授權。

使用 Firebase ID 權杖

您可以透過下列兩種方式取得 Firebase ID 權杖:

擷取使用者的 Firebase ID 權杖後,您就可以代表使用者發出要求。

針對以 Firebase ID 憑證驗證的要求和未經驗證的要求,Cloud Firestore 會使用您的 Cloud Firestore 安全性規則來判定要求是否已獲授權。

使用 Google Identity OAuth 2.0 權杖

您可以使用服務帳戶搭配 Google API 用戶端程式庫,或依照針對伺服器對伺服器應用程式使用 OAuth 2.0 中的步驟產生存取權杖。您也可以使用 gcloud 指令列工具和指令 gcloud auth application-default print-access-token 產生權杖。

這個權杖必須具備下列範圍,才能將要求傳送至 Cloud Firestore REST API:

  • https://www.googleapis.com/auth/datastore

如果您使用服務帳戶和 Google Identity OAuth 2.0 權杖驗證要求,Cloud Firestore 會假設您的要求代表應用程式,而非個別使用者。Cloud Firestore 允許這些要求忽略您的安全性規則。Cloud Firestore 反而會使用 IAM 來判斷要求是否已獲授權。

您可以藉由指派 Cloud Firestore IAM 角色來控制服務帳戶的存取權限。

使用存取權杖驗證

取得 Firebase ID 權杖或 Google Identity OAuth 2.0 權杖後,請將權杖以設為 Bearer {YOUR_TOKEN}Authorization 標頭的形式傳遞至 Cloud Firestore 端點。

發出 REST 呼叫

所有 REST API 端點都存在於基準網址 https://firestore.googleapis.com/v1/ 下。

如要在專案 YOUR_PROJECT_ID 下的 cities 集合中,建立 ID 為 LA 的文件路徑,請使用下列結構。

/projects/YOUR_PROJECT_ID/databases/(default)/documents/cities/LA

如要與這個路徑互動,請將其與基本 API 網址合併。

https://firestore.googleapis.com/v1/projects/YOUR_PROJECT_ID/databases/(default)/documents/cities/LA

如要開始試用 REST API,最佳做法是使用 API Explorer。API Explorer,這個工具會自動產生 Google Identity OAuth 2.0 權杖,並可讓您檢查 API。

方法

以下簡短說明兩個最重要的方法群組。如需完整清單,請參閱 REST API 參考資料或使用 API Explorer

v1.projects.databases.documents

對文件執行 CRUD 作業,類似於新增資料取得資料指南中列出的操作。

v1.projects.databases.collectionGroups.indexes

對索引執行動作,例如建立新索引、停用現有索引,或列出所有目前的索引。適用於自動資料結構遷移或同步處理專案之間的索引。

還可以擷取文件中繼資料,例如指定文件的所有欄位和子集合清單。

錯誤代碼

Cloud Firestore 要求成功時,Cloud Firestore API 會傳回 HTTP 200 OK 狀態碼和所要求的資料。若要求失敗,Cloud Firestore API 會傳回 HTTP 4xx5xx 狀態碼,以及含有錯誤相關資訊的回應。

下表列出每個錯誤代碼的建議動作。這些代碼適用於 Cloud Firestore REST 和 RPC API。Cloud Firestore SDK 和用戶端程式庫可能不會傳回相同的錯誤代碼。

標準化錯誤代碼 說明 建議做法
ABORTED 這項要求與另一項要求相衝突。 非交易修訂項目:
重試要求或調整資料模型的結構以減少爭用情況。

針對交易中的要求:
重試整筆交易,或是重新建構資料模型以減少爭用情況。
ALREADY_EXISTS 這項要求嘗試建立已存在的文件。 未修正問題前請勿重試。
DEADLINE_EXCEEDED 處理這項要求的 Cloud Firestore 伺服器已超出期限。 使用指數輪詢重試。
FAILED_PRECONDITION 要求不符合其中一項先決條件。例如,查詢要求可能需要尚未定義索引。請查看失敗的先決條件錯誤回應中的訊息欄位。 未修正問題前請勿重試。
INTERNAL Cloud Firestore 伺服器傳回錯誤。 此項要求最多只能重試一次。
INVALID_ARGUMENT 要求參數含有無效的值。請查看錯誤回應中的訊息欄位以取得無效值。 未修正問題前請勿重試。
NOT_FOUND 此要求嘗試更新的文件不存在。 未修正問題前請勿重試。
PERMISSION_DENIED 使用者沒有提出此要求的權限。 未修正問題前請勿重試。
RESOURCE_EXHAUSTED 專案已超出配額或區域/多區域的容量。 確認未超過專案配額。如果超出專案配額,請勿在未修正問題的情況下重試。

否則,請以指數輪詢方式重試。
UNAUTHENTICATED 要求未包含有效的驗證憑證。 未修正問題前請勿重試。
UNAVAILABLE Cloud Firestore 伺服器傳回錯誤。 使用指數輪詢重試。