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

TypeScript中如何使用AWS Eventbridge Schema Registry的Marshaller

EventBridge Schema Registry TypeScript Marshaller 使用指南

你下载的官方code bindings已经内置了所有类型映射关系,不需要手动硬编码任何类型标识字符串,两个核心方法的调用规则和type参数传法如下:

  • unmarshal(input: unknown)
    用于反序列化校验:入参直接传你从EventBridge接收到的原始事件对象(比如Lambda触发时传入的完整事件结构),不需要传第二个参数。方法会自动读取事件内置的Schema元信息做匹配,返回经过类型校验的强类型事件对象,字段类型、必填项不匹配时会直接抛出校验错误。
  • marshall(data: any, type: string)
    用于序列化构造合规事件:把你业务代码里构造的事件对象,转换成符合Schema规范、可以直接传入EventBridge PutEvents接口的标准格式。这里的type参数禁止手动自定义字符串,code bindings包会为每个注册的Schema自动导出对应的TYPE_NAME常量,直接导入使用即可。

实际调用示例

假设你在注册表中创建了com.mycompany.order@MyOrderCreatedEvent的Schema,下载绑定后代码结构如下:

// 1. 导入依赖和自动生成的绑定内容
import { Marshaller } from '@aws/eventbridge-sdk-marshaller';
// 注意这里的TYPE_NAME是绑定包自动生成的,和Schema一一对应,不需要自己修改
import { 
  MyOrderCreatedEvent, 
  TYPE_NAME as ORDER_CREATED_EVENT_TYPE 
} from './schemas/com/mycompany/order/MyOrderCreatedEvent';

// 2. 初始化Marshaller实例,全局复用即可
const marshaller = new Marshaller();

marshall 正确调用示例

// 构造业务事件,TS会自动做类型提示和静态校验
const newOrderEvent: MyOrderCreatedEvent = {
  orderId: 'ord_20240520_001',
  payAmount: 129.9,
  createTimestamp: new Date().toISOString(),
  buyerId: 'u_10086'
};

// 第二个参数直接传入绑定包导出的TYPE_NAME常量
const putEventEntryDetail = marshaller.marshall(newOrderEvent, ORDER_CREATED_EVENT_TYPE);

// 生成的putEventEntryDetail是序列化后的JSON字符串,可以直接作为PutEvents接口的Detail参数传入

unmarshal 正确调用示例

// 以Lambda接收到的EventBridge原始事件为例
const rawEvent = {
  version: '0',
  id: 'event-id-xxxx',
  'detail-type': 'MyOrderCreatedEvent',
  source: 'com.mycompany.order',
  account: '123456789012',
  time: '2024-05-20T08:30:00Z',
  region: 'cn-north-1',
  resources: [],
  detail: {
    orderId: 'ord_20240520_001',
    payAmount: 129.9,
    createTimestamp: '2024-05-20T08:30:00Z',
    buyerId: 'u_10086'
  }
};

// 直接传入原始事件即可,无需额外传参
const validOrderEvent = marshaller.unmarshal(rawEvent) as MyOrderCreatedEvent;
// validOrderEvent就是经过运行时校验的类型安全对象,可直接读取字段使用

注意:不要手动硬编码type参数字符串(比如自己写"MyOrderCreatedEvent"传入),自动生成的TYPE_NAME常量包含Schema对应的命名空间、版本等完整匹配信息,手动传值很容易因为标识不匹配导致序列化失败、校验不通过。

内容的提问来源于stack exchange,提问作者Will Zefeng Qiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:25:18