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

Dav*_*vid 13 aws-api-gateway

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

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

Avi*_*lax 16

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

详细信息和演练:API网关更新 - 新功能简化API开发

  • 如果您在 2018 年仍在寻找这个答案,请查看 @geekQ 的答案 (/sf/answers/2842577321/),这是一个真正的包罗万象的答案(与 /a/b/c/ 匹配) d/...) 现在是可能的。 (2认同)

Tom*_*Tom 8

更新:截至上周,API Gateway现在支持他们所谓的"Catch-all Path Variables".请参阅API网关更新 - 新功能简化API开发.


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

例如: method.request.path.XXXX

因此,如果您这样做,/{param}您可以通过以下方式访问:method.request.path.param但如果您有嵌套路径(带斜杠的参数),则无效.您还可以获得整个请求的404.

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

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

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

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

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

  • 从上周开始,API Gateway 现在支持他们所谓的“Catch-all Path Variables”:https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/ (2认同)
  • 您现在还可以使用 `ANY` 请求和 `/{proxy+}` - 不仅仅是通配符路径,还支持通配符 HTTP 方法 \o/ (2认同)

gee*_*ekQ 8

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

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

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

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

完整文档

  • 这对我不起作用 - 当尝试更新资源时,我得到“资源的路径部分仅允许在开头和结尾使用 a-zA-Z0-9._- 和大括号。”。 (3认同)

big*_*ann 8

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

有关更多详细信息,请参阅:宣布 Amazon API Gateway 的 HTTP API

  • 这是对的。与“/{any}+”答案不同,这也将匹配“/”。但是,我发现上面的链接实际上并没有解释这个事实。更好的参考在这里:https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-routes.html#http-api-develop-routes.default (3认同)