在AWS API网关集成中操作路径映射

时间:2016-04-09 20:28:21

标签: aws-api-gateway

我想将API网关中的url参数/ resource / {VaRiAbLe}修改为S3映射,以便它实际指向/ my-bucket / {variable}。也就是说,它接受混合大小写输入,并将其映射到小写名称。映射路径变量对于S3集成来说相对简单,但我似乎无法使小写映射工作。

通过documentation读取映射参数,看起来路径参数是简单的字符串值(而不是模板化值),因此将映射定义为method.request.path.variable.toLowerCase()赢得了不行。

有没有人有任何想法如何实现这种映射?

  • 将路径变量映射到JSON主体,然后调用实际执行S3调用的另一个API方法?
  • 咬紧牙关,并实施一个Lambda函数来为我做S3?
  • 为S3找到另一个api方法,接受我可以用来获取数据的JSON主体吗?

使用Orchestrated调用

进行更新

根据杰克的信息,我认为我应该尝试进行协调的呼叫,因为流量足够低,我确信我无法保持lambda热。

作为概念验证,我在我的资源中添加了两种方法(坐在/resource/{variable} - GETPOSTGET方法链到{{1它可以实际检索数据。

POST方法配置 这是一种vanilla S3代理方法,您可以将POST的网址路径参数设置为{variable}

GET方法配置 这是一种HTTPS代理方法。您需要POST方法的URL,因此您需要部署API以获取URL。这里唯一需要的其他配置是一个包含以下内容的正文映射模板:

method.request.body.variable

这应该足以让这个工作。

这样做的缺点是我正在为我的API添加一个额外的方法(POST),这可能会混淆API的消费者。我认为应该可以在{ "variable" : "$input.params('variable').toLowerCase()", "something" : "$input.params('something')" } 资源上创建POST,这从API设计的角度来看至少会更有意义。

1 个答案:

答案 0 :(得分:1)

根据调用此API的频率,我要么使用Lambda代理,要么将两个API网关方法链接在一起。如果频繁调用API以使Lambda函数保持温暖(例如每分钟一次),那么请使用Lambda。如果没有,请使用协调的API调用。

精心编排的API调用很有意思,如果您有疑问,我很乐意为您提供帮助。

据我所知,获取对象数据的唯一S3 API是其API参考中记录的GET。