【问题标题】:Python vs. Node.js Event Payloads in Firebase Cloud FunctionsFirebase 云函数中的 Python 与 Node.js 事件有效负载
【发布时间】:2019-05-10 13:47:31
【问题描述】:

我正在通过 Python 选项为 Firebase 编写云函数。我对 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/参考/文档:

【问题讨论】:

    标签: python firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    python 运行时目前没有类似的对象结构。 firebase-functions SDK 实际上在创建易于使用的对象方面为您做了很多工作。在 python 环境中没有发生类似的事情。从本质上讲,您对触发您的函数的事件所包含的数据负载有一个非常原始的视图。

    如果您为节点编写实时数据库触发器,使用 Firebase SDK,情况类似。您将获得一个非常基本的对象,其属性类似于 python 字典。

    这就是为什么将 firebase-functions 与 Firebase SDK 一起使用是编写 Firebase 产品触发器的首选环境的原因。开发人员的体验非常好:它为您做了很多方便的工作。缺点是您必须支付 Firebase Admin SDK 的费用才能在冷启动时加载和初始化。

    请注意,您可能可以使用 Firebase Admin SDK for python 解析事件并创建自己的便利对象。

    【讨论】:

    • 这是一个很好的解释道格,谢谢!我发现文档非常混乱;您可以在答案中添加一些链接吗?我最感兴趣的是了解使用和不使用firebase-functions SDK 编写云函数;我不知道存在什么无 SDK 选项。最后一个澄清请求:您能否添加一些有关 Python 和 Node 环境之间性能的信息?
    • 我没有任何性能信息。我这里用的文档,和你用的一样:cloud.google.com/functions/docs/calling/realtime-database
    猜你喜欢
    • 2020-12-15
    • 2018-01-01
    • 2021-04-24
    • 1970-01-01
    • 2021-12-09
    • 2019-06-12
    • 2018-07-01
    • 2016-05-29
    • 2021-02-24
    相关资源
    最近更新 更多