是否可以在 AWS API 网关中使用通配符或包罗万象的路径

Is it possible to use wildcards or catch-all paths in AWS API Gateway

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

对于根路径“/”,我的这个工作正常,但是对子路径的任何请求,例如/a 不被处理。有没有办法定义 "catch all" 资源或通配符路径处理程序?

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

谢谢, - 嘉厚

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


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

例如: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

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

完整的细节和演练在这里:API Gateway Update – New Features Simplify API Development

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

然后在您的 lambda 函数中,您可以使用两者访问该值

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

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

Full documentation

与 AWS 最近推出的 HTTPAPI 相关,$default 使用通配符来捕获所有与定义模式不匹配的路由。

详情请参考:aws blogs