You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:37:15