Firebase实时数据库REST API是否支持不同实体位置的多路径更新?

时间:2018-04-18 12:56:41

标签: firebase google-app-engine firebase-realtime-database

我正在使用带有Java的AppEngine Standard项目的Firebase实时数据库的REST API。我能够成功地将数据放在不同的位置,但是我不知道如何确保对不同路径的原子更新。 将一些数据分别放在我正在做的特定位置:

requestFactory.buildPutRequest("dbUrl/path1/17/", new ByteArrayContent("application/json", json1.getBytes())).execute();

requestFactory.buildPutRequest("dbUrl/path2/1733455/", new ByteArrayContent("application/json", json2.getBytes())).execute();

现在要确保在保存/ path1 / 17 / a / path2 / 1733455 /的同时保存,我一直在研究多路径更新和批量更新(https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes,仅在Cloud Firestore中可用? )但是,我没有发现此功能是否可用于Firebase实时数据库的REST API,或仅通过Firebase Admin SDK。

示例here显示了如何在“users”节点下的两个位置执行多路径更新。

curl -X PATCH -d '{
  "alanisawesome/nickname": "Alan The Machine",
  "gracehopper/nickname": "Amazing Grace"
}' \
  'https://docs-examples.firebaseio.com/rest/saving-data/users.json'

但是我没有path1和path2的公共上层节点。 尝试将url设置为数据库url而没有任何节点(https://db.firebaseio.com.json)并添加发送的json对象中的节点,但是我收到错误:提供了nodename或servname,或者未知。

根据这篇博文:https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html

,我认为可以使用Admin SDK

如果使用REST API可以实现这些原子写入的任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

如果更新发送到单个数据库,则始终是一个公共路径。

在您的情况下,您将针对数据库的根目录运行PATCH命令:

curl -X PATCH -d '{
  "path1/17": json1,
  "path2/1733455": json2
}' 'https://yourdatabase.firebaseio.com/.json'

与您的网址的主要区别似乎是/之前的.json。如果没有这个,你就试图连接到json顶级域名上尚未存在的域名。

请注意,您为“批量更新”提供的文档链接适用于Cloud Firestore,它与Firebase实时数据库完全独立。