从lambda实现的api网关资源,如何获得原始请求URI。或者只是原来的路径?
由于缺乏更好的方法,我目前使用以下三个变量,我使用默认的请求模板传递给lambda:
$context.resourcePath contains the path with variable names ex: "/blah/{var}"
$input.params().path contains the variable names and values ex: {"var":"something"}
$context.stage contains the stage ex: "prod"
这很麻烦,因为它需要路径变量替换来获得原始调用路径:
/prod/blah/something
如何获得原始URL或URI?
我在文档中没有找到任何可以让您获得原始调用URI的内容。我可以添加一个功能请求来考虑添加它。你能描述一下你的用例吗?为什么要获取原始URI?
我找到了一个"变通办法"。
如果您使用BasePathMapping创建自定义域名,并使用此自定义域调用API,原始请求uri实际上在那里有您的舞台名称:
直接调用API网关:
curl -v 'https://some-id.execute-api.eu-central-1.amazonaws.com/v1/ping'
...
request.url: https://some-id.execute-api.eu-central-1.amazonaws.com/ping'
但是如果我们通过自定义域调用它(实际上是一个cloudfront分布):
curl -v -X GET https://api.our.domain.name.com/v1/ping
...
request.url: https://api.our.domain.name.com/v1/ping
在我看来,直接调用在lambda函数中给你一个不正确的请求url,因为url非常清楚地在那里有舞台名称。
这会破坏至少flask的路由中间件。
功能请求有更新吗?