如何将哈希查询参数传递给 AWS API 网关?

How to pass hash query params to AWS API Gateway?

我正在寻找这个问题的哈希等价物:

基本上,我想设置如下所示的查询参数: example.com?color[background]=yellow&color[foreground]=black

当我尝试在 API 网关控制台中创建一个名为 color[background] 的查询参数时,我收到以下错误消息: Invalid mapping expression specified: Validation Result: warnings : [], errors : [Parameter name should be a non-empty alphanumeric string]

我还尝试设置一个 color 查询参数,然后将各种 "hashes" 传递给它。这是我尝试传递给此参数的内容:

  1. {"background" => 123, "foreground" => "abc"} 并删除空格
  2. {"background" : 123, "foreground" : "abc"} 并删除空格
  3. {background:123,foreground:abc}

它们都会导致某种形式的 example.com?color=%7Bbackground:123,foreground:abc%7D 请求,我在 = 之后传递散列。

有什么想法吗?无论如何,这对查询字符串参数来说都是不好的做法吗?我应该坚持使用简单的参数吗?

由于没有定义通过查询字符串传入复杂数据结构(如数组或映射)的标准,API Gateway 不会尝试将查询字符串解释或解析为简单以外的任何内容键值字符串对。

如果你想传入和转换复杂类型,最好在 POST 或 PUT 请求的主体中这样做,你可以利用 JSON 和 API 网关的强大功能body mapping templates feature

或者,如果您必须坚持使用查询字符串参数,则您必须:

  1. 按照上面 Michael -sqlbot 的建议,将您的数据结构折叠成简单的键值对,或者
  2. 将原始查询字符串传递到您的后端 lambda 或 http 集成,在那里它可以根据需要进行解析。有关如何执行此操作的更多详细信息,请参阅