ios - 如何设置全局变量来指定http请求之间的时间?

标签 ios swift httprequest nsurlsession

我在collectionViews中使用带有JSON序列化的http请求,但API间隔是有限的。

“我们确实执行了少量的速率限制。我们当前的限制是每 10 秒 40 个请求,并且受 IP 地址限制,而不是 API key 。您可以认为这是在一秒钟内突发到 40 个请求,或者平均每秒 4 个请求。计时器将从当前 10 秒“桶”内的第一个请求开始重置 10 秒。这意味着,如果您触发限制,则在计时器重置之前最多需要等待 9 秒,但是根据您在 10 秒窗口内所处的位置,也可能是下一秒。

您可以使用每个请求返回的 X-RateLimit header 来跟踪当前限制。如果超出限制,您将收到带有 Retry-After header 的 429 HTTP 状态。一旦您的冷静期到期,您就可以继续提出请求。”

来源:https://developers.themoviedb.org/3/getting-started/request-rate-limiting

我想知道是否可以在 application(_:didFinishLaunchingWithOptions:) 上设置一个全局变量,该变量会自动增加发出的所有 http 请求之间的时间,我需要避免触发 10 秒等待定时器。

private func requestJSON(for dataItem: Movie) -> UIImage? {

    let query = dataItem.title!.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
    let requestURL = URL(string: "https://api.themoviedb.org/3/search/movie?api_key=25149a6f75e14fb0672911327a13939a&language=en-US&query=\(query!)&page=1&include_adult=false&year=\(dataItem.primary_release_year!)")!

    if let data = try? Data(contentsOf: requestURL) {

        if let JSON = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] {

            if let x = JSON?["results"] as? [Dictionary<String, Any>], let y = x.first {

                if let pp = y["poster_path"] as? String {

                    dataItem.poster = try? Data(contentsOf: URL(string: defaultBaseURL + pp)!)

                    print("Downloading... \(dataItem.title!)'s poster.")
                }
            }
        }
    }

    return dataItem.poster?.first != nil ? UIImage(data: dataItem.poster!) : UIImage(named: "default-movie")
}

我希望尽可能避免使用大量任务,无论如何,任何其他解决方案也将非常感激。

最佳答案

不,没有全局变量、NSURLSessionConfiguration 属性或 iOS 中内置的任何内容来实现此功能 - 您必须自己执行此操作。

关于ios - 如何设置全局变量来指定http请求之间的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599901/

相关文章:

ios - UITableView indexPath 和最大可重用单元格数

r - http请求发布用户名和密码以及 header 以在R中获取身份验证/ key

ios - iPhone 不支持任何架构。 (不支持的架构)

ios - 定期从服务器更新 blockerList.json

ios - 隐藏 iOS 导航栏中的所有内容,包括图标

ios - 标题标签文本颜色在 UIButton 中无法正确设置动画

swift - Apple 的 Swift 数据类型绑定(bind)

swift - 如何在 Web 套接字中制作红蜘蛛的单例管理器类

azure - 如何使用 REST API 的输出作为逻辑应用中另一个 REST API 的输入

asp.net-web-api - 我怎样才能告诉Swashbuckle人体必需的成分?