使用Serverless Framework实现GET接口请求校验(无需在Lambda内写校验)
Serverless Framework GET接口请求校验实现方案
核心思路是利用网关层的原生校验能力,在serverless.yml中配置校验规则,请求未通过校验时会被网关直接拦截,不会触发Lambda执行,无需在函数内部写校验逻辑。和POST场景校验请求体的逻辑一致,GET场景只需要把校验对象切换为查询参数或路径参数即可。
具体实现步骤
- 第一步:确定卡片ID的传递方式,可选放在路径参数或查询参数中,在函数的http事件配置中开启参数校验开关
示例配置(卡片ID放在查询参数场景):
functions: getCardData: handler: src/getCard.handler events: - http: path: /card/info method: get # 配置参数必填校验 request: parameters: querystrings: cardId: true # true代表该参数为必填项 # 绑定JSON Schema做格式校验 schemas: application/json: ${file(./src/schemas/card-query.json)}
如果是把ID放在路径中,示例如下:
functions: getCardData: handler: src/getCard.handler events: - http: path: /card/info/{cardId} method: get request: parameters: paths: cardId: true schemas: application/json: ${file(./src/schemas/card-path.json)}
- 第二步:编写对应JSON Schema校验文件,自定义参数格式规则
比如要求cardId为UUID格式、禁止传额外参数的Schema示例:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "cardId": { "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" } }, "required": ["cardId"], "additionalProperties": false }
你可以根据自己的业务规则修改校验逻辑,比如调整正则匹配卡片ID的规则、限制参数长度、添加数值范围校验等。
- 第三步:正常部署即可,部署后API网关会自动生效校验规则,不符合要求的请求会直接返回400错误,不会调用Lambda函数。
注意事项
- Serverless Framework v2及以上版本原生支持上述配置,不需要额外安装插件
- 如果使用非AWS云厂商的Serverless服务,配置逻辑一致,只要在触发器配置中开启参数校验、绑定对应校验规则即可。
内容的提问来源于stack exchange,提问作者geek
相关产品推荐
相关产品推荐

