Vue.js 如何使用axios从airtable中获取所有记录(超过100条)?

Vue.js 如何使用axios从airtable中获取所有记录(超过100条)?,vue.js,axios,Vue.js,Axios,我正在尝试获取airtable中的所有记录,但它只获取了100条记录,但我需要获取100多条记录 loadListings(){ var self = this; var app_id = "**********"; var app_key = "**********"; axios.get( "https://api.airtable.com/v0/"+app_id+"/Weekly%20Report?view=Main%20View", {

我正在尝试获取airtable中的所有记录,但它只获取了100条记录,但我需要获取100多条记录

loadListings(){
  var self = this;
  var app_id = "**********";
  var app_key = "**********";
  axios.get(
      "https://api.airtable.com/v0/"+app_id+"/Weekly%20Report?view=Main%20View",
      {
          headers: { Authorization: "Bearer "+app_key }
      }
  ).then(function(response){
    console.log(response.data.records);
    self.listings = response.data.records;
  }).catch(function(error){
    console.log(error)
  });
}

Airtable API最多返回100条记录。你不能改变这一点。默认情况下,它包含分页

您需要多次呼叫才能获取所有数据。响应将包括一个名为
offset
的属性。您需要检索它并在下次通话中使用它

https://api.airtable.com/v0/"+app_id+"/Weekly%20Report?view=Main%20View&offset=previously_saved_offset

下一次调用将返回一个新的
偏移量,然后返回一个,直到您到达记录的末尾。

TLDR:
您可以尝试使用当http响应(json)中存在偏移量时执行的递归函数

致谢:
这个解决方案花了7个小时的研究、故障排除和伟大而强大的道格的建议。该项目使用Alamofire执行http请求,使用SwiftyJson访问JSON

原因:
在Airtable文档中,他们声明他们的费率限制为每个请求100项。如果一个请求包含100个以上的项目,该请求将包含一个偏移量

他们给出一个指令,在下一个请求中包含偏移量,以获得下一个100个结果。但是,他们没有解释或演示如何做到这一点

解决方案:
已经测试过从25个http请求中检索2565个项目。用Swift编写,逻辑很简单:

编写带有可选偏移量参数的递归函数。调用不带偏移量的函数。检查http响应(json)中的偏移量。如果存在偏移量,则将http请求(json)存储在函数外部的数组中。然后,从内部调用相同的函数-这次使用偏移量

延伸到这里


你能提供更多的细节吗?产生此结果的代码是什么?loadListings(){var self=this;var app_id=“**********”;var app_key=“**********”;axios.get(“,{headers:{Authorization:“Bearer”+app_key})。然后(函数(响应){console.log(response.data.records);self.listings=response.data.records;}).catch(函数(错误){console.log(错误)});}好的,谢谢!请编辑您的问题以包含该代码。您是否尝试过在POSTMAN中点击您的API?它返回的记录是否超过100条?
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.")
    }
}