【问题标题】:How to clear the REST API cache using Alamofire?如何使用 Alamofire 清除 REST API 缓存?
【发布时间】:2021-08-16 04:11:57
【问题描述】:

我正在为这个 iOS 应用程序使用 WooCommerce REST API。下面你可以看到我的 Alamofire 请求。 storeURL、consumerKey 和 consumerSecret 来自 Realm 数据库,与问题无关。如图所示,我在标头中添加了“Cache-Control”:“no-cache”,并为 Alamofire 请求中的缓存响应添加了 .doNotCache。

我的意图是在我加载列出商店中所有产品的 UIViewController 时接收新的 json 响应。与所示功能类似的附加功能允许我创建和/或删除产品。我遇到的问题是我收到的 json 没有更新。有没有办法清除缓存以便从 API 调用中获取更新的数据?

func getProducts(onSuccess: @escaping(_ products: [Product]) -> Void, onError: @escaping(_ errorMessage: String) -> Void) {
    
    var urlParams: [String : String] = [:]
    
    getParams { params in
        urlParams = params
    }
    
    guard let storeURL = urlParams["storeURL"] else { return }
    guard let consumerKey = urlParams["consumerKey"] else { return }
    guard let consumerSecret = urlParams["consumerSecret"] else { return }
    
    let headers: HTTPHeaders = [
        "Accept": "application/json",
        "Cache-Control": "no-cache"
    ]
    
    let parameters = [
        "consumer_key" : consumerKey,
        "consumer_secret" : consumerSecret
    ]
    
    let url = "https://\(storeURL)/wp-json/wc/v3/products"
    
    AF.request(
        url,
        parameters: parameters,
        headers: headers
    ).cacheResponse(
        using: ResponseCacher(
            behavior: .doNotCache
        )
    )
    .responseJSON { response in
        
        switch response.result {
        case .success(let result):
            let json = JSON(result)
            let products = Product.parse(json)
            onSuccess(products)
            
        case .failure(let error):
            onError(error.localizedDescription)
        }
        
        debugPrint(response)
    }
    
}

【问题讨论】:

    标签: swift api rest alamofire cache-control


    【解决方案1】:

    要关闭缓存,最简单的方法是创建自己的 Session 实例,配置为不带 URLCache 实例。

    let configuration = URLSessionConfiguration.af.default
    configuration.urlCache = nil
    let session = Session(configuration: configuration)
    

    保持Session 处于活动状态(通常作为单例)并使用它来发出所有请求,并且不会有任何缓存。

    【讨论】:

    • 这不起作用,但感谢您的帮助。这让我认为问题不在于 Alamofire 端的缓存,而是 WordPress/WooCommece REST API 端的缓存。如果我去我的 cPanel 并清除缓存,我通常会得到最新的 JSON 数据。
    • 是的,如果您在删除 URLCache 实例后仍然收到旧响应,则这不是本地问题。
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多