简单的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中设置缓存,以正确地将这些缓存视为不同的路径和查询请求?
答案 0 :(得分:0)
我相信你不能使用{proxy +},因为这是资源/集成本身,而且是应用缓存的地方。或者你可以(因为你可以缓存任何集成),但是你得到了你得到的结果。
注意:我会使用"资源"很多因为我认为API Gateway中的每个项目都是有问题的项目,但我相信技术上AWS文档会说" integration"因为它不仅仅是资源,而是在所述资源上的实际集成...并且所述资源具有集成和参数或者我将继续调用查询字符串参数。向术语警察道歉。
换句话说,如果您有两个资源:GET foo/bar
和GET foo/barlist
,那么您就可以在其中一个或两个上设置缓存。基于此资源的级别存在缓存(不要考虑最终的URL路径,而是考虑API网关中配置的实际资源)。不幸的是,它并不知道将{proxy +}分解为无限数量的路径。实际上它的方法加上资源。所以我相信你可以为GET / path和POST / path提供不同的缓存结果。
然而。您还可以选择集成参数作为缓存键。这意味着?filter=value
和?limit=value
将是两个不同的缓存键,具有两个不同的缓存响应。
如果foo/bar
和foo/barlist
具有相同的查询字符串参数(并且您仍在使用{proxy +}),那么您将再次遇到该重复问题。
因此,在这种情况下,您可能希望foo?action=bar&filter=value
和foo?action=barlist&filter=value
。
对于每个查询字符串参数,您当然需要对此进行配置。所以这也可能开始减少{proxy +}捕获所有内容的难易程度。 Terraform.io是你的朋友。
这是我希望的更自动/更智能的东西。我经常使用{proxy +},这确实给使用缓存带来了挑战。