如何将URL部分映射到AWS API网关中的参数?

时间:2018-08-02 16:18:46

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

是否可以在AWS API网关中根据以下伪代码模板映射URL参数?

/mysite/data/results/{id}/image/{filename}

我在网络表单上看不到适当的字段:

enter image description here

URL查询字符串参数可能用于?之后的内容


它也不在资源部分自由接受花括号:

enter image description here

2 个答案:

答案 0 :(得分:1)

在API网关中。添加资源时,需要在定义资源和映射url时指定路径变量(路径参数)。

enter image description here

如您所见,它还支持Path变量和Proxy变量。

答案 1 :(得分:1)

您可以执行以下步骤:

  • 对于每个路由,分别是/ mysite,/ data,/ results /,/ image /创建专用资源
  • 然后,导航(点击)到结果资源,并在操作内创建名为
  • 的新资源。
    • 将资源名称*设置为id,将资源路径*设置为{id}
    • 然后,您将看到刚刚创建的{id}资源。为此,为您创建必要的方法(“ GET”,“ POST”,“ ANY” ...)。然后,打开方法属性(由您自己创建),然后转到“集成请求”。在底部找到名为Mapping template的选项。
    • 创建新的映射模板(可以是“ application / json”),然后在其中粘贴以下代码段:

        {
          "body" : $input.json('$'),
          "headers": {
            #foreach($header in $input.params().header.keySet())
            "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end
        
            #end
          },
          "method": "$context.httpMethod",
          "params": {
            #foreach($param in $input.params().path.keySet())
            "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
        
            #end
          },
          "query": {
            #foreach($queryParam in $input.params().querystring.keySet())
            "$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
        
            #end
          }  
        }
    
  • 对其他资源和方法应用相同的过程

随后,您将能够通过以下方式调用您的API:

/mysite/data/results/{id}/image/{filename} --> /mysite/data/results/10/image/aws_support.jpg

要解析lambda函数中的URL参数,您可以轻松地应用以下内容:

    def lambda_handler(event, context):
        path_parameters = event['params'] # all the passed parameters within URL will be stored under event "params" key

event['params']格式如下:

    {
    "id" = "10",
    "filename" = "aws_support.jpg"
    }