使用API​​网关将数组查询参数传递给lambda

时间:2017-04-13 21:10:30

标签: amazon-web-services aws-lambda aws-api-gateway

我们可以在API网关中创建如下所示的Rest URL吗?

  

[GET] / employees?id = 1& id = 2& id = 3& id = 4

我找不到发送id数组并将该数组放入lambda(python)函数的方法

4 个答案:

答案 0 :(得分:6)

现在已经很晚了,但我遇到了同样的问题并发现了问题:

来自AWS API Gateway Reference

  

当查询参数是列表类型时,其值必须是逗号分隔项的字符串。例如,GET / restapis / restapi_id / deployments / deployment_id?embed = apisummary,sdksummary。

     

Amazon API Gateway不支持表单的嵌套查询参数:方法请求中的GET / team?user [id] = usrid。您可以通过将编码映射作为单个参数传递并将其作为映射模板的一部分或在后端集成中进行序列化来解决此限制。

因此,您可以使用的修正方法是重构您的请求:

[GET] /employees?id=1,2,3,4

希望这有帮助!

答案 1 :(得分:1)

AWS API事件具有一个“ multiValueQueryStringParameters”字段,该字段可代替“ queryStringParameters”使用。它将包含所有参数的值数组:

idArray = event["multiValueQueryStringParameters"]["id"]

答案 2 :(得分:0)

尝试使用json语法发送数组,例如:/employees?ids=['1','2','3']

答案 3 :(得分:0)

这可以帮助javascript

this site

var mapQueryString = require('amazon-api-gateway-querystring');
event.params.querystring = mapQueryString(event.params.querystring);

event.params.querystring = {
  "person[0][name]": "Mark",
  "person[0][age]": 32,
  "person[1][name]": "Luke",
  "person[1][age]": 26,
  "contacts[home][phone]": "+3333333333",
  "contacts[home][email]": "email@email.com",
  "contacts[home][twitter]": "@username"
}

// become: 

event.params.querystring = {
  "person": [{
    "name": "Mark",
    "age": 32
  }, {
    "name": "Luke",
    "age": 26
  }],
  "contacts": {
    "home": {
      "phone": "+3333333333",
      "email": "email@email.com",
      "twitter": "@username"
    }
  }
}