例如,如果我们想用
得到-用户?name =鲍勃
or
获取/用户/鲍勃
如何将这两个例子作为参数传递给Lambda函数?
我在文档中看到了一些关于设置“映射from”的内容,但我在API Gateway控制台中找不到该设置。
method.request.path。在方法请求页面中定义了一个名为parameter-name的路径参数。
method.request.querystring。parameter-name用于在方法请求页面中定义的名为parameter-name的查询字符串参数。
尽管我定义了一个查询字符串,但我没有看到这两个选项。
下面的参数映射示例通过JSON有效负载将所有参数(包括路径、查询字符串和报头)传递给集成端点
#set($allParams = $input.params())
{
"params" : {
#foreach($type in $allParams.keySet())
#set($params = $allParams.get($type))
"$type" : {
#foreach($paramName in $params.keySet())
"$paramName" : "$util.escapeJavaScript($params.get($paramName))"
#if($foreach.hasNext),#end
#end
}
#if($foreach.hasNext),#end
#end
}
}
实际上,这个映射模板输出负载中的所有请求参数,如下所示:
{
"parameters" : {
"path" : {
"path_name" : "path_value",
...
}
"header" : {
"header_name" : "header_value",
...
}
'querystring" : {
"querystring_name" : "querystring_value",
...
}
}
}
复制自Amazon API Gateway开发者指南
为了将参数传递给lambda函数,您需要在API Gateway请求和lambda函数之间创建映射。映射在所选API Gateway资源的集成请求->映射模板部分中完成。
创建一个application/json类型的映射,然后在右侧编辑(单击铅笔)模板。
映射模板实际上是一个Velocity模板,你可以使用if,循环,当然还可以打印变量。模板中注入了这些变量,你可以分别访问查询字符串参数、请求头等等。使用下面的代码,您可以重新创建整个查询字符串:
{
"querystring" : "#foreach($key in $input.params().querystring.keySet())#if($foreach.index > 0)&#end$util.urlEncode($key)=$util.urlEncode($input.params().querystring.get($key))#end",
"body" : $input.json('$')
}
注意:点击复选符号保存模板。您可以使用资源中的“test”按钮测试更改。但是为了在AWS控制台中测试查询字符串参数,您需要在资源的Method Request部分中定义参数名称。
注意:查看Velocity用户指南以获得关于Velocity模板语言的更多信息。
然后在你的lambda模板中,你可以执行以下操作来解析查询字符串:
var query = require('querystring').parse(event.querystring)
// access parameters with query['foo'] or query.foo