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 仓库中.
连接
- 关于 GitHub 讨论的 AWS Lambda 工具数字 : 加入对话
- 电子邮件数字 : aws-lambda-powertools- [email protected] 互联网档案馆的存檔,存档日期2014-12-21
如何支持 AWS Lambda (TypeScript) 的 Powertools ?
成为参考客户
了解哪些公司正在使用这个图书馆对于帮助在内部确定项目的优先次序很重要。 如果您的公司正在使用 Powertools 为 AWS Lambda (TypeScript) , 您可以要求您在 README 文件中添加您的姓名和标志 AWS Lambda( TypeScript) 的辅助电源工具(成为参考) 问题.
除其他外,下列公司使用Powertools:
- Alma 媒体
- 应用自己
- 贝利·纳尔逊
- Banx 软件
- 凯伦特
- 可认证
- 代码
- EF 教育第一
- 埃尔瓦
- 飞行重量
- 欺诈
- 全球数据网
- 关节
- 半径
- 内向
- 本地软件包
- 我们的隐私
- 完美邮递
- 传感器
- 铁丝网股份有限公司
- 绊脚石10
- 学校
分享你的工作
分享您为 AWS Lambda (TypeScript) 所做的 Powertools 。 看看社区有什么 已经共享 关于AWS Lambda的Powertools (TypeScript).
使用 Lambda 层
这帮助我们了解谁用Powertools为AWS Lambda(英语:TypeScript (TypeScript))以非侵入性的方式使用Powertools,并帮助我们获得未来对其他AWS Lambda语言的Powertool的投资. 何时 使用图层,您可以添加Powertools作为dev的依赖性,以不影响开发过程.
许可证
这个图书馆根据MIT-0许可证获得许可. 见LICENSE文件.