首页 > 解决方案 > 如何使用带有 API 密钥和服务帐户令牌的 CURL 访问 Firestore?

问题描述

我正在尝试使用终端会话中的 cURL 访问我的 Firestore 数据库。我已经阅读了 Firestore 的 REST API 文档和用于验证 Oauth 和服务帐户的身份验证文档。我在 API 仪表板中设置了服务帐户和 IAM 角色。我无法从文档中确定正确的路径和语法以及 API 密钥和 BEARER 令牌的用途。例如,我正在尝试接收 USER xyz 的 json 响应,文档字段 FNAME 存储在 PROJECT 测试项目中的 Firestore DATABASE(注意 - 我在哪里可以找到 databaseID?)。

这是文档中的 CURL 命令列表 -

curl \
  'https://firestore.googleapis.com/v1beta1/%5BNAME%5D?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

curl --request POST \
  'https://firestore.googleapis.com/v1beta2/%5BNAME%5D:exportDocuments?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{}' \
  --compressed

问题是 - 我对 [YOUR_API_KEY] 使用什么?[YOUR ACCESS TOKEN] 我用什么 -

我已经从我设置的服务帐户的凭据中尝试了以下操作

Service account - Key - 3......................e76
Unique ID - 1............39

获取 API KEY 和 ACCESS TOKEN 并返回 403 错误

我也有 Oauth 凭证 -

Client ID - 2.....113-95.......cpqrarqb.....qnrpc.apps.googleusercontent.com
Client Secret - L......lq

小路

https://firestore.googleapis.com/v1/projects/{project_id}/databases/{database_id}/collectionGroups/{collectionId}/fields/{field_id}

哪个也没用...

同样,我正在尝试使用 CURL 访问和读取数据并将数据写入我的 Firestore 数据库 - 作为我的 REST API 的代理。非常感谢任何帮助和帮助。

标签: firebasecurlgoogle-cloud-firestore

解决方案


根据您粘贴的 curl 命令,我了解到您希望将 Firestore 集合导出到 Cloud Storage 存储桶。此外,我了解您从 export 方法的 api explorer获得了 curl 命令。

要为 [YOUR_API_KEY] 提供一个 api 键值,首先需要在您的 GCP 项目中创建一个 api 键;这是过程:

  1. 转到凭据部分。
  2. 单击顶部名为“创建凭据”的选项。
  3. 选择 API 密钥。
  4. 复制并保存 Cloud Console 抛出的值(这是您的 api 密钥)。

如果您想了解更多有关 API 密钥的信息,可以访问

要提供 oauth 令牌值,您可以执行以下操作:

  1. 您可以打开Cloud Shell。
  2. 运行命令gcloud auth application-default print-access-token
  3. 复制并保存 Cloud Shell 抛出的值(这是您的 oauth 令牌)。

请注意,有多种方法可以创建 oauth 令牌,但我指定的一种是最快的。你也可以使用 oauth playground来生成你的令牌;请记住,令牌的有效期为 60 分钟。

根据我使用的数据库 ID(默认),在这里我包括我的 curl 语句:

curl --request POST \  
'https://firestore.googleapis.com/v1/projects/[PROJECT_ID]/databases/(default):exportDocuments?key=[YOUR_API_KEY]' \  
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \  
--header 'Accept: application/json' \  
--header 'Content-Type: application/json' \  
--data '{"collectionIds":["users"],"outputUriPrefix":"gs://[BUCKET_PATH]"}' \  
--compressed

推荐阅读