AWS API Gateway:如何在映射模板中使querystring参数可选?

Nic*_*ick 7 amazon-web-services aws-lambda aws-api-gateway

我似乎无法弄清楚如何使用资源的Integration Request中的映射模板创建可选的查询字符串参数.

我的模板看起来像这样:

{ "limit": "$input.params('limit')", "post_date":"$input.params('post_date')" } 
Run Code Online (Sandbox Code Playgroud)

我希望'limit'和'post_date'是可选的.此模板在未提供这些参数时创建一个如下所示的查询字符串:

/myresource?limit=undefined&
Run Code Online (Sandbox Code Playgroud)

当我期待:

 /myresource
Run Code Online (Sandbox Code Playgroud)

文件似乎并没有掩盖这一点.我在文档中找到了一些示例模板,它们使用类似bash的语法来提供条件功能.我已尝试测试以下内容,但不会在AWS控制台中进行验证:

        #set($limit = $input.path('limit'))
        { 
          #if($limit)"limit": "$input.params('limit')",#end
        } 
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上吗?

谢谢!

Tom*_*ill 7

是的,你绝对可以在 Api Gateway 中做到这一点;虽然它似乎没有很好的记录!

在您的问题中,您提到这是一个参数;但是您使用了 input.path,它通常指的是 POST 请求正文中的一个元素。以下应该工作:

#set($limit = $input.params('limit'))
{
#if($limit && $limit.length() != 0)
"limit": "$input.params('limit')"
#end
}
Run Code Online (Sandbox Code Playgroud)

在文档方面,我发现来自 AWS 的以下页面实际上非常有用。不过,它隐藏在有关模拟端点的部分中:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-mock-integration.html