TLDR:
您可以尝试使用在 http 响应 (json) 中存在偏移时执行的递归函数。
致谢:
这个解决方案花费了 7 个小时的研究、故障排除和伟大而强大的 Doug 的建议。该项目使用 Alamofire 执行 http 请求,使用 SwiftyJson 访问 JSON。
原因:
在 Airtable 文档中,他们声明他们的速率限制是每个请求 100 个项目。如果请求的项目超过 100 个,则请求将包含偏移量。
他们给出了一个指令,在你的下一个请求中包含偏移量以获得下一个 100 个结果。但是,他们没有解释或演示如何做到这一点。
解决方案:
已测试从 25 个 http 请求中检索 2,565 个项目。用 Swift 编写,逻辑很简单:
编写一个带有可选偏移量参数的递归函数。调用没有偏移量的函数。检查偏移量的 http 响应 (json)。如果偏移量存在,则将 http 请求 (json) 存储在函数外部的数组中。然后,从内部调用相同的函数 - 这次使用偏移量。
扩展代码在这里。
func requestAirtableRecords(forTable table: String, withTableView tableView: String, withOffset offset: String?, completion: @escaping ([JSON]) -> ()) {
let parameters: [String: Any] = offset != nil ? ["view": tableView, "offset": offset!] : ["view": tableView]
do {
let url: URLRequest = try self.requestRecordsURL(table: table, method: HttpRequest.get, parameters: parameters)!
Alamofire.request(url).responseJSON { (response) in
switch response.result {
case .success(_):
let json = JSON(response.result.value!)
self.jsonArray.append(json)
let nextOffset = json["offset"]
if nextOffset.exists() {
self.requestAirtableRecords(forTable: table, withTableView: tableView, withOffset: nextOffset.stringValue, completion: { _ in
completion(self.jsonArray)
})
} else {
completion(self.jsonArray)
}
case .failure(let error):
print(error)
}
}
} catch {
print("Error: Unable to request records from Airtable.")
}
}