You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Hasura REST端点接收Azure Event Grid的无根键数组请求?

问题

尝试将Hasura REST端点作为Azure Event Grid订阅的Webhook,但Azure发送的验证Payload是无根键的数组结构:

[
    {
        "id": "2d1781af-3a4c-4d7c-bd0c-xxxxxxxxxxx",
        "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "subject": "",
        "data": {
            "validationCode": "512d38b6-c7b8-40c8-89fe-xxxxxxxxxxx",
            "validationUrl": "https://rp-eastus2.eventgrid.azure.net:553/eventsubscriptions/myeventsub/validate?id=0000000000-0000-0000-0000-00000000000000&t=2022-10-28T04:23:35.1981776Z&apiVersion=2018-05-01-preview&token=1A1A1A1A"
        },
        "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
        "eventTime": "2022-10-28T04:23:35.1981776Z",
        "metadataVersion": "1",
        "dataVersion": "1"
    }
]

Hasura中定义的用于包装为REST端点的Mutation如下:

mutation ProcessEvent($events: [EventInput]!) {
  storage_event_handshake(event: $events) {
    validationResponse
  }
}

调用时会抛出错误:

{
    "code": "validation-failed",
    "error": "expecting a value for non-nullable variable: \"events\"",
    "path": "$"
}

手动将Azure的Payload用events根键包裹后可正常运行,但无法修改Azure发送的Payload格式,需要找到让Hasura直接接收这种数组结构的方法,同时支持后续事件通知处理。

解决方案

方法1:使用Hasura请求转换(推荐)

Hasura的REST端点内置请求转换功能,可在控制台配置规则,自动将Azure发送的顶层数组包装为Hasura需要的格式:

  1. 进入Hasura控制台,打开REST API页面,找到对应的ProcessEvent端点配置
  2. 在Request Transformation区域,选择JSONata作为转换语言,输入以下表达式:
    {"events": $}
    
  3. 保存配置后,Hasura会自动将Azure的数组请求转换为{"events": [/* 原数组内容 */]}的格式,匹配Mutation的变量要求

方法2:自定义Resolver接收数组

若需要更灵活的处理逻辑,可创建自定义Resolver直接接收顶层数组:

  1. 在Hasura中创建自定义Resolver,指定其接收的请求体为数组类型
  2. 将Resolver与storage_event_handshake函数绑定,直接把请求数组作为参数传入
  3. 该方法需编写自定义业务代码,适合复杂事件处理场景

方法3:中间层代理服务

如果Hasura内置转换无法满足需求,可搭建简单的中间代理:

  • 代理服务接收Azure的数组请求
  • 将请求体包装为{"events": 原数组}格式后转发给Hasura REST端点
  • 将Hasura的响应原样返回给Azure
  • 适合需要额外处理(如日志、事件过滤)的场景

内容的提问来源于stack exchange,提问作者HelmBurger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:18:16