【问题标题】:AWS API Gateway: How do I make querystring parameters optional in mapping template?AWS API Gateway:如何在映射模板中将查询字符串参数设为可选?
【发布时间】:2021-08-27 20:15:56
【问题描述】:

我似乎不知道如何在我的资源的集成请求中使用映射模板创建可选的查询字符串参数。

我的模板如下所示:

{ "limit": "$input.params('limit')", "post_date":"$input.params('post_date')" } 

我希望 'limit' 和 'post_date' 是可选的。当未提供这些参数时,此模板会创建一个如下所示的查询字符串:

/myresource?limit=undefined&

当我期待时:

 /myresource

Docs 似乎没有涵盖这一点。我在文档中找到了一些示例模板,它们使用类似 bash 的语法来提供条件功能。我已尝试测试以下内容,但无法在 AWS 控制台中验证:

        #set($limit = $input.path('limit'))
        { 
          #if($limit)"limit": "$input.params('limit')",#end
        } 

我走对了吗?

谢谢!

【问题讨论】:

  • 我认为你应该定义所有可能的参数,然后在你的后端处理undefined
  • 您是否使用Lambda 作为后端?
  • @napalm 这就是我现在正在做的事情。真的是AWS?!那很蹩脚。 Lambda -> 是的
  • 真的不蹩脚,处理管道是基于JS的。它无法知道你是否故意传入undefined
  • @napalm 一定是这样。无论如何,我正在后端处理这个问题。谢谢你的想法。

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


【解决方案1】:

是的,您绝对可以在 Api Gateway 中执行此操作;虽然它似乎没有很好的记录!

在您的问题中,您提到这是一个参数;但是您使用了 input.path,它通常会引用 POST 请求正文中的元素。以下应该有效:

#set($limit = $input.params('limit'))
{
#if($limit && $limit.length() != 0)
"limit": "$input.params('limit')"
#end
}

在文档方面,我发现 AWS 的以下页面实际上非常有用。不过,它隐藏在关于模拟端点的部分中:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-mock-integration.html

【讨论】:

    【解决方案2】:

    想要做出贡献,因为 Tom Kerswill 的回答对我不起作用。

    我一直遇到这样的问题:如果我定义了一个可选参数但没有使用它,我会在调用 API 时收到 JSON 解析异常。

    我是如何开始工作的:

    #set($hasOptional = $input.params("optionalParam") != "")
    {
        "requiredParam1": $input.params("requiredParam1"),
        "requiredParam2": $input.params("requiredParam2"),
        #if(!$hasOptional )
        "optionalParam": null
        #end
        #if($hasOptional )
        "optionalParam": $input.params("optionalParam")
        #end
    }
    

    仅使用第二个“if”语句运行不起作用,如果可选参数不存在,我必须显式将其设置为 null。

    还要注意引号的使用,在整个 $input 周围加上引号...从来没有为我工作过。例如

    "$input.params('limit')"
    

    我必须完全像这样写出来:

    "requiredParam1": $input.params("requiredParam1")
    

    希望这可以帮助另一个沮丧的 AWS API Gateway 用户。

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 2020-09-28
      • 2021-01-13
      • 2016-12-03
      • 2017-11-30
      • 1970-01-01
      • 2020-11-25
      • 2018-06-28
      相关资源
      最近更新 更多