如何验证AWS API Gateway查询参数?限制pageSize最大值为100
如何在API Gateway直接集成DynamoDB时限制pageSize参数最大值
你遇到的问题核心在于:API Gateway直接对接DynamoDB时,请求映射模板的输出是发送给DynamoDB的请求结构,而非返回给客户端的HTTP响应。之前的模板直接返回statusCode结构不会被识别为错误,反而会作为无效参数传给DynamoDB,导致达不到预期效果。以下是两种无需额外集成方式的解决方案:
方法1:使用API Gateway原生请求验证(推荐)
这是最简洁的方案,无需修改VTL模板,直接通过API Gateway的参数验证规则实现限制:
- 登录API Gateway控制台,找到目标API的
/items资源和对应HTTP方法 - 进入请求验证配置页,启用请求验证
- 添加查询参数
pageSize的验证规则:- 参数类型选择「整数」
- 设置最大值为
100,可按需配置最小值(比如1)
- 保存配置并重新部署API
当客户端传入的pageSize超过100时,API Gateway会直接返回400 Bad Request,并附带默认的错误提示。
方法2:修改VTL模板+配置集成响应
如果需要自定义错误消息,可以通过在VTL中抛出异常,再配置集成响应映射到400状态码:
步骤1:更新请求映射模板
替换原VTL模板为以下内容,当pageSize超出限制时抛出明确的异常信息:
#if($input.params('pageSize')) #set($pageSize = $input.params('pageSize').toInt()) #if($pageSize > 100) #throw("InvalidPageSize: Size parameter exceeds the maximum allowed value of 100") #end #end { "TableName": "DDBTable", "IndexName": "idx_name", "Limit": $input.params('pageSize') != null ? $pageSize : 10, # 可根据需求设置默认值 "KeyConditionExpression": "GSI1PK = :v1", "ExpressionAttributeValues": { ":v1": {"S": "1"} }, "ReturnConsumedCapacity": "TOTAL", "ScanIndexForward": false }
步骤2:配置集成响应映射错误到400
- 进入目标方法的集成响应配置页
- 点击「添加集成响应」,设置错误正则表达式为
InvalidPageSize:.*(匹配抛出的异常信息) - 将HTTP状态码设为
400 - 在「响应模板」中添加
application/json类型的模板,返回自定义错误消息:
{ "error": "Bad Request", "message": "Size parameter exceeds the maximum allowed value of 100" }
- 保存配置并重新部署API
这样当pageSize超出限制时,VTL抛出的异常会被API Gateway捕获,返回你定义的400错误响应。
内容的提问来源于stack exchange,提问作者Vishnupriya Ramanathan
相关产品推荐
相关产品推荐

