如何在AWS API Gateway中验证路径参数{id}的存在与类型?
可以在API Gateway中验证路径参数的存在性和类型
API Gateway完全支持在请求到达Lambda之前验证路径参数的存在性与类型,只是配置入口相对隐蔽,容易被忽略。以下是具体实现方式:
针对REST API的配置步骤
确保路径参数必填
- 进入API Gateway控制台,找到目标API和
/users/{id}资源。 - 打开该资源对应方法(如GET/POST)的方法请求页面。
- 在
Request Path Parameters区域,点击「Add Path Parameter」,输入id并勾选「Required」选项。此时API Gateway会自动拦截未携带id参数的请求,直接返回400错误。
- 进入API Gateway控制台,找到目标API和
验证参数类型
- 先创建模型定义参数规则:
- 在API的「Models」页面点击「Create model」,输入名称(如
UserIdModel),内容类型选application/json,填入JSON Schema:{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "id": { "type": "integer" } }, "required": ["id"] }
- 在API的「Models」页面点击「Create model」,输入名称(如
- 创建请求验证器:
- 在API的「Request Validators」页面点击「Create request validator」,勾选「Validate request path parameters」选项后保存。
- 关联验证规则:
- 返回方法请求页面,在「Request Validator」下拉框选择刚创建的验证器,再将路径参数
id的「Validation」选项关联到UserIdModel。
- 返回方法请求页面,在「Request Validator」下拉框选择刚创建的验证器,再将路径参数
- 配置完成后,若
id不是整数类型,API Gateway会直接返回400错误,不会将请求转发到Lambda。
- 先创建模型定义参数规则:
针对HTTP API的配置步骤
HTTP API的验证配置更简洁,直接通过JSON Schema定义:
- 进入API Gateway控制台,找到目标HTTP API,进入「Routes」页面选择
/users/{id}路由。 - 在「Request validation」区域点击「Edit」,选择「Create new model」,填入定义路径参数类型的JSON Schema:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "parameters": { "path": { "id": { "type": "integer" } } } }, "required": ["parameters"] } - 保存后,API Gateway会自动验证路径参数的存在性和类型,不符合规则的请求会被拦截。
补充说明
如果仅需验证参数格式(如id必须是数字字符串),无需复杂类型校验,可以在方法请求的路径参数设置中添加正则表达式:在路径参数id的「Regex」字段填入^\d+$,非数字格式的id会被直接拦截。
内容的提问来源于stack exchange,提问作者Marwan Ghazala
相关产品推荐
相关产品推荐

