Javascript 优化分页REST API数据的收集
我需要从第三方RESTAPI收集数千条记录,但每次调用最多只能收集99条记录。此外,API不返回有关记录总数或页面计数的任何信息,它只返回布尔值“more_records” 为了收集一个页面的数据,必须进行几百次API调用,这显然是非常缓慢的,这会导致我的一条路由超时。我对优化的第一个想法是将API调用划分为异步任务,但由于除了“更多记录”之外没有停止信息,我不确定如何处理调用这些任务 我用Django做这个,我已经把芹菜做了其他用途。超时的路由收集并处理此数据和其他数据,并将其作为JSON返回以填充一个总报告。我的一个想法是打破这个JSON路由,这样我的gross report的Javascript就可以进行许多较小的API调用并处理数据本身,但这只能解决超时问题,因为任何调用都不会花费太长时间。我所看到的优化响应时间的唯一方法是减少API调用的数量或异步处理它们,而且我认为使用此API进行更少的调用是不可能的 无论如何,我需要帮助设计一个函数来处理异步进行多个API调用和聚合数据,而不知道数据的最后一页在哪里,直到我到达它为止。我可以在Python/Django后端使用芹菜完成异步任务,也可以使用异步JavaScript 我不知道这是否有助于作为起点,但这是我现在拥有的同步功能:Javascript 优化分页REST API数据的收集,javascript,python,django,rest,celery,Javascript,Python,Django,Rest,Celery,我需要从第三方RESTAPI收集数千条记录,但每次调用最多只能收集99条记录。此外,API不返回有关记录总数或页面计数的任何信息,它只返回布尔值“more_records” 为了收集一个页面的数据,必须进行几百次API调用,这显然是非常缓慢的,这会导致我的一条路由超时。我对优化的第一个想法是将API调用划分为异步任务,但由于除了“更多记录”之外没有停止信息,我不确定如何处理调用这些任务 我用Django做这个,我已经把芹菜做了其他用途。超时的路由收集并处理此数据和其他数据,并将其作为JSON返回
def get_salesiq_records(module:str, access_token:str, parameters:dict={}):
records = []
more_records = True
parameters['index'] = 1
while more_records:
response = requests.get(
f'https://salesiq.zoho.com/api/v2/mywebsite/{module}',
params=parameters,
headers={'Authorization': 'Zoho-oauthtoken ' + access_token} )
if response is None:
raise CustomException(
status=status.HTTP_502_BAD_GATEWAY,
info='No response from Zoho CRM API / get records.'
)
elif response.status_code == status.HTTP_204_NO_CONTENT:
more_records = False
else:
response_data = response.json()
if response.status_code != status.HTTP_200_OK:
raise CustomException(
status = response.status_code,
info = f'Bad response from Zoho SalesIQ API. Module: {module}',
details = response_data
)
records.extend(response_data['data'])
# Why can't Zoho APIs at least be consistent within one service?
if module == 'conversations':
more_records = response_data['more_data_available']
parameters['index'] += parameters.get('limit', 20)
elif module == 'operators':
more_records = (len(response_data['data']) == 20)
parameters['index'] += 1
return records
我传入的参数dict只是{'limit':99},这是每页的最大限制