@aws-lambda-powertools/validation

中文文档
2.36.0发布于 2026/10/06MIT-0TypeScriptESM + CJS构建来源已验证近 30 天下载 1.5万

使用 JSON Schemas 验证事件和响应的工具

中文使用文档
文档目录14 节
  1. 特征
  2. 校验器装饰器
  3. 验证器中间软件
  4. 独立验证函数
  5. JMESPath 支持
  6. 扩展验证符
  7. 贡献
  8. 路线图
  9. 连接
  10. 如何支持 AWS Lambda (TypeScript) 的 Powertools ?
  11. 成为参考客户
  12. 分享你的工作
  13. 使用 Lambda 层
  14. 许可证

AWS Lambda (TypeScript) - 验证工具

这个工具为事件和响应提供了JSON Schema验证,包括JMESPath在验证前对已解围事件的支持.

用于 AWS Lambda (TypeScript) 的 Powertools 是用于执行无服务器的开发者工具包 最佳做法和增加开发者的速度。您可以在 TypeScript 和 JavaScript 代码库中使用库.

要启动, 请通过运行安装软件包 :

npm i @aws-lambda-powertools/validation

特征

您可以使用下列设备验证出入境有效载荷: @validator 类方法装饰器或 validator Middy.j的中间软件.

也可以单独使用 validate 函数,如果您想要对验证过程进行更多的控制,例如处理验证错误.

校验器装饰器

这个 @validator 装饰器是TypeScript类方法的装饰器,可以用来验证来袭事件和应答有效载荷.

如果验证失败,我们会扔一个 SchemaValidationError。 。 。 .

import { validator } from '@aws-lambda-powertools/validation/decorator';
import type { Context } from 'aws-lambda';

const inboundSchema = {
  type: 'object',
  properties: {
    value: { type: 'number' },
  },
  required: ['value'],
  additionalProperties: false,
};

const outboundSchema = {
  type: 'object',
  properties: {
    result: { type: 'number' },
  },
  required: ['result'],
  additionalProperties: false,
};

class Lambda {
  @validator({
    inboundSchema,
    outboundSchema,
  })
  async handler(event: { value: number }, _context: Context) {
    // Your handler logic here
    return { result: event.value * 2 };
  }
}

const lambda = new Lambda();
export const handler = lambda.handler.bind(lambda);

进出有效载荷的验证并非强制性的. 你可以使用一个,另一个,或者两者兼有.

验证器中间软件

如果你在使用Middy.js, 你可以改用 validator 用于验证即将到来的事件和反应有效载荷的中间软件.

import { validator } from '@aws-lambda-powertools/validation/middleware';
import middy from '@middy/core';

const inboundSchema = {
  type: 'object',
  properties: {
    foo: { type: 'string' },
  },
  required: ['foo'],
  additionalProperties: false,
};

const outboundSchema = {
  type: 'object',
  properties: {
    bar: { type: 'number' },
  },
  required: ['bar'],
  additionalProperties: false,
};

export const handler = middy()
  .use(validation({ inboundSchema, outboundSchema }))
  .handler(async (event) => {
    // Your handler logic here
    return { bar: 42 };
  });

喜欢 @validator 装饰者,可以选择只验证出入境有效载荷.

独立验证函数

这个 validate 函数赋予您对验证过程的更多控制,通常在 Lambda 处理器内部使用,或者其他需要验证数据的函数.

在使用独立函数时, 您可以通过抓取来优雅地处理计划验证错误 SchemaValidationError 错误.

import { validate } from '@aws-lambda-powertools/validation';
import { SchemaValidationError } from '@aws-lambda-powertools/validation/errors';

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'number' },
  },
  required: ['name', 'age'],
  additionalProperties: false,
} as const;

const payload = { name: 'John', age: 30 };

export const handler = async (event: unknown) => {
  try {
    const validatedData = validate({
      payload,
      schema,
    });

    // Your handler logic here
  } catch (error) {
    if (error instanceof SchemaValidationError) {
      // Handle the validation error
      return {
        statusCode: 400,
        body: JSON.stringify({ message: error.message }),
      };
    }
    // Handle other errors
    throw error;
  }
}

JMESPath 支持

在某些情况下,你可能只想要验证事件有效载荷的一部分——这就是: envelope 选项.

您可以使用 JMESPath 表达式指定要验证的属性的路径 。 校验器将在校验前解开此事件 .

import { validate } from '@aws-lambda-powertools/validation';

const schema = {
  type: 'object',
  properties: {
    user: { type: 'string' },
  },
  required: ['user'],
  additionalProperties: false,
} as const;

const payload = {
  data: {
    user: 'Alice',
  },
};

const validatedData = validate({
  payload,
  schema,
  envelope: 'data',
});

扩展验证符

由于验证器是建立在 亚日弗,您可以用自定义格式和外部计划来扩展它,并带回自己的 ajv 举个例子.

下面的例子说明如何将额外选项传递到 validate 函数,但您也可以将其传递给 @validator 装饰和 validator 中间软件.

import { validate } from '@aws-lambda-powertools/validation';

const formats = {
  ageRange: (value: number) => return value >= 0 && value <= 120,
};

const definitionSchema = {
  $id: 'https://example.com/schemas/definitions.json',
  definitions: {
    user: {
      type: 'object',
      properties: {
        name: { type: 'string' },
        age: { type: 'number', format: 'ageRange' },
      },
      required: ['name', 'age'],
      additionalProperties: false,
    }
  }
} as const;

const schema = {
  $id: 'https://example.com/schemas/user.json',
  type: 'object',
  properties: {
    user: { $ref: 'definitions.json#/definitions/user' },
  },
  required: ['user'],
  additionalProperties: false,
} as const;

const payload = {
  user: {
    name: 'Alice',
    age: 25,
  },
};

const validatedData = validate({
  payload,
  schema,
  externalRefs: [definitionSchema],
  formats,
});

欲了解如何使用 validate 函数,请参见 文档。 。 。 .

贡献

如果你有兴趣为这个项目捐款,请参见我们 贡献准则。 。 。 .

路线图

AWS Lambda(英语:TypeScript)的"Powertools"行进图受顾客需求所驱动.
帮助我们确定未来功能或公用事业的优先次序 更新现有 RFC 和功能请求,或 创建新的,在此 GitHub 仓库中.

连接

如何支持 AWS Lambda (TypeScript) 的 Powertools ?

成为参考客户

了解哪些公司正在使用这个图书馆对于帮助在内部确定项目的优先次序很重要。 如果您的公司正在使用 Powertools 为 AWS Lambda (TypeScript) , 您可以要求您在 README 文件中添加您的姓名和标志 AWS Lambda( TypeScript) 的辅助电源工具(成为参考) 问题.

除其他外,下列公司使用Powertools:

分享你的工作

分享您为 AWS Lambda (TypeScript) 所做的 Powertools 。 看看社区有什么 已经共享 关于AWS Lambda的Powertools (TypeScript).

使用 Lambda 层

这帮助我们了解谁用Powertools为AWS Lambda(英语:TypeScript (TypeScript))以非侵入性的方式使用Powertools,并帮助我们获得未来对其他AWS Lambda语言的Powertool的投资. 何时 使用图层,您可以添加Powertools作为dev的依赖性,以不影响开发过程.

许可证

这个图书馆根据MIT-0许可证获得许可. 见LICENSE文件.

版本与发布记录

@aws-lambda-powertools/validation 共发布 30 个版本,首次发布于 2025/03/13;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.36.0latest2026/10/061 个月前
2.35.02026/08/182 个月前
2.34.02026/07/103 个月前
2.33.12026/05/255 个月前
2.33.02026/04/146 个月前
2.32.02026/03/197 个月前

其他发布通道:pre → 0.0.0。

关于 @aws-lambda-powertools/validation 的常见问题

@aws-lambda-powertools/validation 是什么?

使用 JSON Schemas 验证事件和响应的工具

如何安装 @aws-lambda-powertools/validation?

在项目目录运行 npm install @aws-lambda-powertools/validation,或使用 pnpm add / yarn add / bun add。

@aws-lambda-powertools/validation 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-lambda-powertools/validation 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@aws-lambda-powertools/validation 可以商用吗?

@aws-lambda-powertools/validation 使用 MIT-0 许可。声明的许可为 MIT-0,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@aws-lambda-powertools/validation 的下载量有多少?

根据 npm 官方下载统计,@aws-lambda-powertools/validation 在 2026/10/08 – 2026/11/06 这 30 天内被下载 14,700 次,日均约 490 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-lambda-powertools/validation 还在维护吗?

最新版本 2.36.0 发布于 2026/10/06(1 个月前);至今共发布 30 个版本,其中过去 12 个月发布了 11 个;首次发布于 2025/03/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。