我正在通过Python选项为Firebase编写Cloud Function。我对 Firebase 实时数据库触发器感兴趣;换句话说,我愿意监听我的实时数据库中发生的事件。
Python 环境提供以下签名来处理实时数据库触发器:
def handleEvent(data, context):
# Triggered by a change to a Firebase RTDB reference.
# Args:
# data (dict): The event payload.
# context (google.cloud.functions.Context): Metadata for the event.
这看起来不错。data
参数提供 2 个字典;'data'
用于在更改之前通知数据,'delta'
更改的位。
将此签名与Node.js
环境进行比较时,就会出现混淆。以下是来自Node.js
世界的类似签名:
exports.handleEvent = functions.database.ref('/path/{objectId}/').onWrite((change, context) => {}
在此签名中,change
参数非常强大,它似乎是firebase.database.DataSnapshot
型 .它有很好的帮助程序方法,如hasChild()
或numChildren()
,提供有关更改对象的信息。
问题是:Python 环境是否有类似的DataSnapshot
对象?例如,使用 Python,我是否必须查询数据库才能获取子级的数量?目前还不清楚Python环境能做什么,不能做什么。
相关 API/参考/文档:
Firebase 实时数据库触发器:https://cloud.google.com/functions/docs/calling/realtime-database
数据快照参考:https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot
python 运行时目前没有类似的对象结构。firebase-functions
SDK 实际上为您在创建易于使用的对象方面做了很多工作。 在python环境中没有发生类似的事情。 您基本上可以对触发函数的事件所包含的数据有效负载获得一个非常原始的视图。
如果您为节点编写实时数据库触发器,而不是使用 Firebase SDK,则会出现类似的情况。 你会得到一个非常基本的对象,其属性类似于python字典。
这就是为什么将firebase-functions
与 Firebase SDK 结合使用是从 Firebase 产品编写触发器的首选环境的原因。 开发人员体验优越:它为您做了一堆方便的工作。 缺点是您必须支付Firebase管理员SDK的费用,以便在冷启动时加载和初始化。
请注意,您可以使用适用于 python 的 Firebase 管理员 SDK 解析事件并创建自己的便利对象。