【发布时间】:2021-04-17 13:54:09
【问题描述】:
我正在使用 Alamofire 5,并且要求应该缓存一些 GET 请求。如果数据早于 20 分钟,则应点击真正的 API。
我发现是使用 ResponseCacher。但我看不到配置单个请求的方法,需要一些建议。
let responseCacher = ResponseCacher(behavior: .modify { _, response in
let userInfo = ["date": Date()]
return CachedURLResponse(
response: response.response,
data: response.data,
userInfo: userInfo,
storagePolicy: .allowed)
})
let configuration = URLSessionConfiguration.af.default
private override init() {
configuration.timeoutIntervalForRequest = 10
configuration.requestCachePolicy = .reloadRevalidatingCacheData
Session(
configuration: configuration,
serverTrustManager: ServerTrustManager(evaluators: evaluators),
cachedResponseHandler: responseCacher
)
【问题讨论】:
-
如果可以在后端指定返回数据的“新鲜度”语义,您的用例可以在客户端使用本地 URL 缓存并遵循 HTTP 协议以实际零代码实现,后端发送相应的响应头。这通常是这种情况,也强烈建议这样做,而不是在客户端实现任何自定义缓存逻辑。如果您需要更多帮助,我很乐意在答案中提供更多详细信息。
-
是的 - 我会非常感兴趣如何使用 ResponseCacher 或任何需要的东西来完成正确的实现。我被要求创建一个 CoreData 数据库并在那里缓存数据,但我认为这不是你写的方式。
-
您可以在您的应用程序中实现基于 URL 缓存的“离线”支持,并结合一些填充 URL 缓存的后台“预取”功能。我们已经在我们的应用程序中做到了这一点,并且效果很好。你当然可以使用 CoreData 来缓存你的数据。是否要使用 URLCaches 或 CoreData 的决定当然取决于其他几个要求。关于缓存,HTTP 缓存非常强大,而且(几乎)是免费的,因为在 URLSession 和后端实现。