ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Hasura Event Triggers 与 Google Cloud Functions(Python)实战:echo 示例解析与完整部署指南

Hasura Event Triggers 与 Google Cloud Functions(Python)实战:echo 示例解析与完整部署指南 Hasura Event Triggers 与 Google Cloud FunctionsPython实战echo 示例解析与完整部署指南【免费下载链接】graphql-engineBlazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events.项目地址: https://gitcode.com/gh_mirrors/gr/graphql-engine本指南以 graphql-engine 仓库中 python 版 Google Cloud Functions 事件触发器样板 为主体完整讲解如何使用 Python 编写云函数响应 Hasura Event Triggers 的数据库事件包括profile表结构设计、echo函数对事件 payload 的解析、基于gcloudCLI 的部署流程以及在 Hasura Console 中创建触发器的全部步骤。读完本文你将掌握「数据库变更 → Webhook 云函数 → 处理事件 payload」这条链路的落地方法并理解事件 payload 的核心字段结构。一、样板概览两个示例与语言支持矩阵在 google-cloud-functions 目录 下官方为 Google Cloud Functions 提供了以下两类事件触发器用例用例用途Node.js(8)Node.js(6)Pythonecho回显触发器 payload帮助理解事件结构与数据解析✅✅✅mutation在 insert 事件中通过 GraphQL mutation 插入关联数据✅✅❌push-notification在数据库事件上发送推送通知❌❌❌etl转换触发器 payload 并更新 algolia 索引❌❌❌从矩阵可以看出Python 样板当前只实现了echo用例对应目录 python/echo而mutation用例目前仅有 Node.js 版本可作为理解云函数内调用 GraphQL 写回数据库这一模式的参考实现见 nodejs6/mutation。该矩阵表本身也表明部分语言/平台仍在持续完善中欢迎社区贡献。二、前置条件按 google-cloud-functions 根 README 的说明动手前需要准备已启用计费billing的 Google Cloud 账户本机安装gcloudCLI一套可访问的 Hasura GraphQL Engine 实例。由于示例使用gcloud beta命令需要先安装 beta 组件gcloud components update gcloud components install beta三、第一步创建profile数据表事件触发器监听的是数据库表的变化因此先在 Hasura Console 中建表。按 echo 示例说明建表信息如下Table name: profile Columns: id: Integer auto-increment name: Text address: Text lat: Numeric, Nullable lng: Numeric, Nullable建表要点id为整数自增主键name、address为文本列lat、lng为数值列且允许为空Nullable。lat/lng刻意设计为可空是为后续mutation用例预留的字段——云函数根据address调用地理编码服务后回填经纬度。在 echo 用例中它们仅作为 payload 数据的一部分被回显。四、第二步编写并理解 echo 云函数Python 版本的 echo 函数位于 python/echo/main.py完整代码如下from flask import jsonify def function(request): request_json request.get_json() op request_json[event][op] data request_json[event][data] name request_json[table][name] schema request_json[table][schema] response {message: received event, data: {op, data, name, schema}} print(response) return jsonify(messagereceived event, data{op: op, data: data, name: name, schema: schema})这段代码虽然短小却清晰展示了 Hasura Event Triggers HTTP payload 的四个核心字段字段含义在本示例中的取值event.op触发事件的数据库操作类型INSERT/UPDATE/DELETEevent.data事件携带的数据负载与操作类型相关的new/old数据table.name发生变更的数据表名profiletable.schema数据表所属的数据库 schemapublic两个值得注意的实现细节函数签名Google Cloud FunctionsPython 3.7 运行时要求入口函数接收request参数并返回可序列化的响应对象这里借助 Flask 的jsonify构造 JSON 响应。响应结构函数返回message: received event以及拆解后的op、data、name、schema同时通过print(response)输出日志。对于 echo 场景你既可以从 HTTP 响应中看到事件回显也可以在 Cloud Functions 的日志中检索到打印内容。与 Node.js 版 echo 函数 对比可发现两者解析逻辑完全一致只是语言形态不同exports.function (req, res) { const { event: {op, data}, table: {name, schema} } req.body; const response {message: received event, data: {op, data, name, schema}}; console.log(response); res.json(response); };关于event.data的补充说明从 mutation 用例 的源码可以看到data.new的用法const { id, address } data.new;。结合 Hasura Event Triggers 的事件模型可以推断在INSERT事件中data包含new字段新插入的行在DELETE事件中包含old字段在UPDATE事件中则同时包含new与old。echo 函数原样返回整个data因此是观察真实 payload 结构最直接的途径——这也是该用例帮助理解事件 payload 和如何解析数据的初衷。五、第三步部署到 Google Cloud Functions在python/echo目录下执行部署命令对应 echo 示例说明gcloud beta functions deploy python-echo \ --runtime python37 \ --trigger-http参数说明python-echo云函数的名称--runtime python37指定 Python 3.7 运行时对应入口main.py中的function函数--trigger-http以 HTTP 触发器方式暴露函数便于被 Hasura 的 Webhook 调用。部署成功后gcloud会输出函数的触发器 URL形如httpsTrigger: url: https://us-central1-hasura-test.cloudfunctions.net/python-echo记录这个 URL下一步创建触发器时需要填写。注意目录中的 .gcloudignore 与 .gitignore 分别用于控制上传到云函数与提交到 Git 的文件范围。六、第四步在 Hasura Console 中创建事件触发器打开 Hasura Console进入Events - Add Trigger按以下配置创建触发器Trigger name: profile_change Schema/Table: public/profile Operations: Insert, Update, Delete Webhook URL: [Trigger URL]各配置项含义Trigger name触发器名称此处为profile_changeSchema/Table监听的目标表public/profile对应上一步创建的profile表Operations需要监听的操作类型示例同时勾选 Insert、Update、Delete 三种Webhook URL填入上一步获取到的云函数 HTTPS 触发器 URL。创建完成后每当public.profile表发生指定操作Hasura GraphQL Engine 就会将包含事件信息的 HTTP 请求即 echo 函数解析的那个 payload发送到该 Webhook URL。七、第五步触发事件并验证按 echo 示例说明 的最后一步在 Hasura Console 中进入Data - profile - Insert row新增一行数据并保存观察云函数日志或 HTTP 响应即可看到 echo 函数回显的事件信息。由于触发器同时监听了 Insert、Update、Delete 三种操作你也可以尝试编辑或删除该行验证不同操作类型下event.op与event.data的差异。八、从源码结构看这套链路的扩展方向将整个 google-cloud-functions 目录与 event-triggers 相关文档 对照阅读可以发现这套样板设计的扩展路径echo → mutationecho 只做读 payload而 mutation 用例展示了在云函数内部通过 GraphQL mutation 把处理结果写回数据库如用地理编码 API 解析address后回填lat/lng。Python 版虽未实现 mutation但可直接参考 Node.js 版实现其核心思路是在云函数中通过环境变量注入 GraphQL Engine 地址与 API Key再向/v1/graphql端点发起 mutation。部署形态对比Node.js 版 mutation 示例使用了--env-vars-file .env.yaml传递环境变量见 .env.yamlGMAPS_API_KEY与HASURA_GRAPHQL_ENGINE_URL均以这种方式注入这是云函数中安全配置外部服务凭据的常见做法同样适用于 Python 函数。事件驱动架构本样板属于仓库 event-triggers 架构说明 所描述的事件触发体系的一个具体落地实现适合作为数据库事件驱动异步逻辑的最小可运行示例。九、小结本文围绕 python/README.md 完整还原了 Hasura Event Triggers × Google Cloud FunctionsPython的实战链路建表 → 理解 payload → 编写 echo 函数 →gcloud部署 → Console 创建触发器 → 插入数据验证。核心收获有三点事件 payload 结构event.op、event.data、table.name、table.schema四个字段是解析一切 Hasura 事件的基础部署与接线方式HTTP 触发的云函数 URL 即 Webhook通过Events - Add Trigger完成与数据库表的绑定可复用的扩展模式在云函数内通过 GraphQL mutation 回写数据库参考 Node.js 版 mutation 用例可将 echo 轻松升级为真正的业务处理函数。相关文件索引Python 样板总说明echo 示例步骤文档echo 函数源码Google Cloud Functions 样板总览与前置条件Node.js mutation 参考实现【免费下载链接】graphql-engineBlazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events.项目地址: https://gitcode.com/gh_mirrors/gr/graphql-engine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表