如何将数组查询参数传递给AWS API Gateway?

时间:2015-08-05 22:44:02

标签: aws-api-gateway

Rails API通常喜欢这样的数组查询参数:

example.com?colors[]=cyan&colors[]=magenta&colors[]=yellow&colors[]=black

我如何将其映射到lambda函数?

4 个答案:

答案 0 :(得分:8)

一个小小的试验和错误表明它是这样的:

example.com?colors=['cyan','magenta','yellow','black']

答案 1 :(得分:5)

根据https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html,您无法做的事情是重复的查询字符串参数密钥:

  

不支持重复的标头。

API Gateway将参数映射到JSON对象,因此只要每个项目都有自己唯一的密钥,就不会有任何破坏。

你的选择很好,但我还是集思广益。您可以在方括号中添加标记:

example.com?colors[0]=cyan&colors[1]=magenta&colors[2]=yellow&colors[3]=black

如果您愿意从GET交换到POST,可以在POST正文中发送查询字符串。然后您可以自己解析原始查询字符串。你甚至可以在这里重复使用param键,因为你正在解析它。

?colors=cyan&colors=magenta&colors=yellow&colors=black

另一个POST选项是在POST正文中发送JSON数组。我知道POST不像GET那样易于使用,但它是一种选择。

["cyan","magenta","yellow","black"]

答案 2 :(得分:3)

如@ kjs3中所述,API Gateway不支持查询字符串或标题中的重复参数。但是,您可以使用单参数数组格式。

支持重复的参数键+值是我们想要做的事情,但我目前没有ETA。

答案 3 :(得分:3)

API网关代理现在支持查询字符串中具有相同名称的多个参数。 它们通过multiValueQueryStringParameters字典传递。

例如

 GET /api/path/?param=value&param=othervalue&something=thing

将生成以下请求:

{
    "resource": "/{proxy+}",
    "path": "/ap/path/",
    "httpMethod": "GET",
    "queryStringParameters": {
        "param": "othervalue",  # only the last value is kept here
        "something": "thing"
    },
    "multiValueQueryStringParameters": {
        "param": [
            "value",
            "othervalue"
        ],
        "something": [
            "thing"
        ]
    },
    "pathParameters": {
        "proxy": "api/path"
    },
    # etc
}

请参见documentation