【问题标题】:How to pass hash query params to AWS API Gateway?如何将哈希查询参数传递给 AWS API Gateway?
【发布时间】:2016-05-02 23:36:13
【问题描述】:

我正在寻找这个问题的哈希值:How to pass array query params to AWS API Gateway?

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

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

我还尝试设置 color 查询参数,然后将各种“哈希”传递给它。这是我尝试传递给此参数的内容:

  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 能够理解您想要表达的意思……此时它只是一个字符串值……但是……它是否支持键名中的点?如果我只是为没有特定平台设计 API,我倾向于使用 ?color.background=yellow&color.background=black 来提高可读性,但这可能不是“字母数字”,具体取决于他们使用该术语的松散程度。
  • @Michael-sqlbot -- 谢谢!我打算这样做。

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


【解决方案1】:

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

如果您想传入和转换复杂类型,最好在 POST 或 PUT 请求的主体中执行此操作,您可以在其中利用 JSON 和 API 网关强大的 body mapping templates feature

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

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

【讨论】:

  • 有道理。我可以调整我的后端来处理这个问题。谢谢!
猜你喜欢
  • 2021-01-13
  • 2016-08-13
  • 2019-09-03
  • 2017-11-14
  • 1970-01-01
  • 2016-07-02
  • 2016-07-28
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多