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

kjs*_*js3 11 aws-api-gateway

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

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

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

kjs*_*js3 9

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

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

  • @napalm问题是有很多框架使用这样的约定; `列[0] [数据] = ID&列[0] [名称] = ID&列[0] [搜索] = TRUE;! (4认同)

Tom*_*eba 7

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

不支持重复的标头.

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

你的选择很好,但我集思广益了其他一些选择.你可以做一些事情,比如在方括号中添加标记:

example.com?colors[0]=cyan&colors[1]=magenta&colors[2]=yellow&colors[3]=black
Run Code Online (Sandbox Code Playgroud)

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

?colors=cyan&colors=magenta&colors=yellow&colors=black
Run Code Online (Sandbox Code Playgroud)

另一个POST选项是在POST主体中发送JSON数组.我知道POST不像GET那样容易使用,但它是一个选项.

["cyan","magenta","yellow","black"]
Run Code Online (Sandbox Code Playgroud)


Ant*_*wan 5

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

例如

 GET /api/path/?param=value&param=othervalue&something=thing
Run Code Online (Sandbox Code Playgroud)

将生成以下请求:

{
    "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
}
Run Code Online (Sandbox Code Playgroud)

请参阅文档

  • 这是关于 Lambda 和 API Gateway 的正确答案。 (2认同)