Rest 使用HTTP管理API资源缓存
我目前正在使用ASP MVC API开发一个SPA。我们最近在API响应上添加了通过HTTP头的客户端缓存,根据预期的更改频率使用适当的最大年龄值 虽然这有助于提高性能,但我们现在遇到了一个问题,即用户自己进行更改,然后在重新加载页面时使用旧数据进行缓存命中 为了解决这个问题,我在GET请求中添加了一个版本参数,该参数在每次更改时都会递增 然而,我现在发现POST、PUT或DELETE请求应该使GET请求的缓存对同一URI无效 有鉴于此,我想知道如何更好地设计我的API,这样版本参数就没有必要了,浏览器会自动处理这个问题 例如:我有Rest 使用HTTP管理API资源缓存,rest,http,caching,api-design,Rest,Http,Caching,Api Design,我目前正在使用ASP MVC API开发一个SPA。我们最近在API响应上添加了通过HTTP头的客户端缓存,根据预期的更改频率使用适当的最大年龄值 虽然这有助于提高性能,但我们现在遇到了一个问题,即用户自己进行更改,然后在重新加载页面时使用旧数据进行缓存命中 为了解决这个问题,我在GET请求中添加了一个版本参数,该参数在每次更改时都会递增 然而,我现在发现POST、PUT或DELETE请求应该使GET请求的缓存对同一URI无效 有鉴于此,我想知道如何更好地设计我的API,这样版本参数就没有必要了
是否有一个简单的解决方案?在您引用的同一章中,规范说明: 请注意,这并不能保证所有适当的响应都是正确的 无效 在分布式环境中,失效是一项非常困难的任务。可能有其他缓存或其他资源依赖于相同的数据(如您的情况)。这意味着不应该尝试,只将其计划到系统中更便宜 一个“解决方法”是让客户机强制更新它知道必须更改的资源,因为
PUT
。因此,您可以请求自己(以及缓存)使用以下标头更新“父”资源的表示:
Cache-Control: max-age=0
同样,其他缓存可能仍然有过期但仍然有效的缓存响应,但它解决了在同一台计算机上不接收同一进程的冲突信息的问题
因此,我不会“规范化”表示以只返回URI而不返回任何数据,我宁愿以一种尽可能避免此类问题的方式设计工作流。如果没有,请强制刷新(如上所述),设置足够小的缓存时间,或者在其他所有操作都失败时不缓存。谢谢,您已经基本确认了我的预期。这从一开始就是一个糟糕的设计项目,在改造时,缓存直到最后才被视为性能问题的解决方案。现在我正在改装缓存失效。下次我会尽量设计得更好:)