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

时间:2019-02-08 20:43:05

标签: ios swift httprequest nsurlsession

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

“我们确实实施了少量的速率限制。我们当前的限制是每10秒40个请求,并且受IP地址(而不是API密钥)限制。您可以认为这可以在一秒钟内爆发到40个,或者平均每秒4个请求。计时器将在当前10秒“存储桶”内从您的第一个请求重设10秒。这意味着,如果触发限制,您将需要等待9秒才能重设计时器,但是根据您在10秒窗口内的位置,可能是下一秒。

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

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

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

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")
}

我将尽量避免使用尽可能多的任务,无论如何,任何其他解决方案也将不胜感激。

1 个答案:

答案 0 :(得分:0)

否,没有全局变量,<span *ngIf="firstNameVar.errors"> Please enter your first name. </span> 属性或iOS内置的任何可实现此目的的东西-您必须自己完成。