我在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")
}
我将尽量避免使用尽可能多的任务,无论如何,任何其他解决方案也将不胜感激。
答案 0 :(得分:0)
否,没有全局变量,<span *ngIf="firstNameVar.errors">
Please enter your first name.
</span>
属性或iOS内置的任何可实现此目的的东西-您必须自己完成。