【问题标题】:AWS Lambda, Caching {proxy+}AWS Lambda,缓存 {proxy+}
【发布时间】:2017-08-23 21:54:30
【问题描述】:

简单的 ASP.Net AWS Lambda 已上传并使用以下几种方式运行:

{代理+}

api/foo/bar?filter=value

api/foo/barlist?limit=value

在 Postman 中测试的路径为: //#####.execute-api.us-west-2.amazonaws.com/Prod/{proxy+}

现在想要启用 API 缓存,但这样做时只有第一个 api 调用被缓存,所有其他调用现在错误地返回第一个缓存值。

ie //#####.execute-api.us-west-2.amazonaws.com/Prod/api/foo/bar?filter=value == //#####.execute-api .us-west-2.amazonaws.com/Prod/api/foo/barlist?limit=value;就缓存而言,这些返回相同但不应该。

如何在 APIGateway 中设置缓存,以正确地将这些请求视为每个路径和查询的不同请求?

【问题讨论】:

  • 两年后遇到同样的问题。我希望 AWS 让这一切变得更容易。 :-(

标签: asp.net caching .net-core aws-lambda aws-api-gateway


【解决方案1】:

我相信您不能使用 {proxy+},因为它本身就是一个资源/集成,并且是应用缓存的地方。或者你可以(因为你可以缓存任何集成),但你会得到你得到的结果。

注意:我会经常使用“资源”这个词,因为我认为 API Gateway 中的每个项目都是有问题的项目,但我相信从技术上讲 AWS 文档会说“集成”,因为它不仅仅是资源,但对所述资源的实际集成......并且所述资源具有集成和参数,或者我将继续调用查询字符串参数。向术语警察道歉。

换句话说,如果您有两个资源:GET foo/barGET foo/barlist,那么您可以在其中一个或两个上设置缓存。缓存就是在这个基于资源的级别上存在的(不要考虑最终的 URL 路径,而是 API Gateway 中配置的实际资源)。不幸的是,它不知道将 {proxy+} 分成无限数量的路径。实际上是方法加资源。所以我相信你可以为 GET /path 和 POST /path 获得不同的缓存结果。

但是。您还可以选择集成参数作为缓存键。这意味着?filter=value?limit=value 将是两个不同的缓存键,具有两个不同的缓存响应。

如果 foo/barfoo/barlist 具有相同的查询字符串参数(并且您仍在使用 {proxy+}),那么您将再次遇到重复的问题。

所以你可能希望在这种情况下使用foo?action=bar&filter=valuefoo?action=barlist&filter=value

您当然需要为每个查询字符串参数进行配置。因此,这也可能开始降低 {proxy+} 捕获所有内容的便利性。 Terraform.io 是你的朋友。

这也是我希望更自动化/更智能的东西。我经常使用 {proxy+},它确实为使用它们的缓存带来了挑战。

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多