我正在使用带有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可以实现这些原子写入的任何想法吗? 谢谢!
答案 0 :(得分:1)
如果更新发送到单个数据库,则始终是一个公共路径。
在您的情况下,您将针对数据库的根目录运行PATCH
命令:
curl -X PATCH -d '{
"path1/17": json1,
"path2/1733455": json2
}' 'https://yourdatabase.firebaseio.com/.json'
与您的网址的主要区别似乎是/
之前的.json
。如果没有这个,你就试图连接到json
顶级域名上尚未存在的域名。
请注意,您为“批量更新”提供的文档链接适用于Cloud Firestore,它与Firebase实时数据库完全独立。