是否可以在AWS API Gateway中使用通配符或catch-all路径

时间:2016-03-03 13:05:38

标签: aws-api-gateway

我正在尝试将一个域的所有流量重定向到另一个域。我没有专门为此工作运行服务器,而是尝试使用AWS API Gateway和lambda来执行重定向。

我对根路径“/”有效,但对子路径的任何请求,例如/ a未处理。有没有办法定义“catch all”资源或通配符路径处理程序?

5 个答案:

答案 0 :(得分:15)

截至上周,API Gateway现在支持他们所谓的“Catch-all Path Variables”。

详细信息和演练内容:API Gateway Update – New Features Simplify API Development

答案 1 :(得分:8)

更新:截至上周,API Gateway现在支持他们所谓的“Catch-all Path Variables”。请参阅API Gateway Update – New Features Simplify API Development

不幸的是,您需要为每个级别创建资源。原因是API Gateway允许您通过对象访问这些参数。

例如:method.request.path.XXXX

因此,如果你只是/{param},你可以使用:method.request.path.param访问它,但是如果你有一个嵌套路径(带有斜杠的参数),它就不会工作。您还可以获得整个请求的404.

如果method.request.path.param是一个数组而不是...那么它可以在没有命名的情况下按位置获取参数。例如method.request.path.param[] ...命名参数甚至可以在那里处理,但访问它们并不容易。它需要使用某种JSON路径映射(想想你可以用它们的映射模板做什么)。遗憾的是,这不是它在API网关中的处理方式。

我认为没关系,因为这可能会使配置API网关变得更加复杂。但是,它也限制了API网关,并且为了处理这种情况,最终你最终会得到一个更混乱的配置。

所以,你可以走很远的路。为多个资源创建相同的方法,并执行以下操作:/{1}/{2}/{3}/{4}/{5}/{6}/{7}等。然后,如果需要,您可以处理每个路径参数级别。

如果参数的数量总是相同的,那么你有点幸运,只需要设置一堆资源,但最后只需要一种方法。

来源:https://forums.aws.amazon.com/thread.jspa?messageID=689700&#689700

答案 2 :(得分:7)

您可以使用/{thepath+}之类的路径创建资源。加号很重要。

然后在lambda函数中,您可以使用

访问该值
  • event.path - 始终包含完整路径
  • event.pathParameters.thepath - 包含您定义的部分。其他可能的用例:定义/images/{imagepath+}之类的资源,仅匹配具有特定前缀的pathes。该变量仅包含子路径。

您可以使用以下代码调试传递给函数的所有值:JSON.stringify(event)

Full documentation

答案 3 :(得分:1)

您可以使用路径变量/{param}创建资源,并将其视为通配符路径处理程序。

谢谢, - 嘉侯

答案 4 :(得分:0)

与AWS最近引入的 HTTPAPI 有关,$ default用于通配符,用于捕获与定义的模式不匹配的所有路由。

有关更多详细信息,请参阅:aws blogs