AWS Lambda,缓存{proxy +}

时间:2017-08-23 21:54:31

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

简单的ASP.Net AWS Lambda已上传,其功能如下:

{代理+}

API /富/栏?过滤器=值

API /富/ barlist?极限=值

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

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

即//#####.execute-api.us-west-2.amazonaws.com/Prod/api/foo/bar?filter=value == //#####.execute-api页面没有自动跳转-西2.amazonaws.com /生产/ API /富/ barlist极限=值?;就缓存而言,这些返回相同但不应该是。

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

1 个答案:

答案 0 :(得分:0)

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

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

换句话说,如果您有两个资源:GET foo/barGET foo/barlist,那么您就可以在其中一个或两个上设置缓存。基于此资源的级别存在缓存(不要考虑最终的URL路径,而是考虑API网关中配置的实际资源)。不幸的是,它并不知道将{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 +},这确实给使用缓存带来了挑战。