How to pass array query params to AWS API Gateway?

回眸只為那壹抹淺笑 提交于 2019-11-29 17:46:58

问题


A Rails API typically likes array query params like this:

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

How would I map that through to a lambda function?


回答1:


A little trial and error shows that it's like this:

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




回答2:


One thing you can't do is have duplicated query string param keys as per https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html:

Duplicated headers are not supported.

API Gateway maps the parameters to a JSON object so as long as each item has their own unique key, you won't get any clobbering.

Your option is good but I brainstormed some other options. You could do something like adding indicies in the square brackets:

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

You could send the query string in the POST body if you were willing to swap from GET to POST. Then you can parse the raw query string yourself. You can even have repeated param keys here because you are parsing it.

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

Another POST option is to send a JSON array in the POST body. I know POST isn't as easy to work with as GET but it's an option.

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



回答3:


Multiple arguments with same name in query string are now supported in API Gateway proxies. They are passed in the multiValueQueryStringParameters dictionary.

E.g.

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

Will generate the following request:

{
    "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
}

See documentation.




回答4:


As discussed in @kjs3 answer, API Gateway doesn't support duplicate parameters in the query string or headers. However you can use the single parameter array format.

Supporting duplicate parameter keys+values is something we do want to do, but I don't have an ETA at the moment.



来源:https://stackoverflow.com/questions/31844045/how-to-pass-array-query-params-to-aws-api-gateway

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!