如何在api网关中获取原始请求URI?

时间:2016-06-27 15:26:23

标签: aws-api-gateway

从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

如何获取原始网址或URI?

2 个答案:

答案 0 :(得分:2)

我在文档中找不到任何可以让您获得原始调用URI的内容。我可以添加功能请求以考虑添加它。你能描述一下你的用例吗?为什么要获取原始URI?

答案 1 :(得分:0)

我找到了一种“解决方法”。

如果您使用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函数中为您提供了一个不正确的请求网址,因为该网址中很明显带有阶段名称。

这至少破坏了烧瓶的路由中间件。

功能请求是否有更新?