我正在调用API来获取联系人列表(它们可能在100或者1000年内),并且一次只列出100个列表,它给了我这个分页选项,其中包含一个对象。列表的末尾名为' nextpage'以及下一个100的URL等等..
所以在我的c#代码中,我得到第一个100并循环遍历它们(做某事)并查找' nextpage'对象并获取URL并重新调用API等。看起来这个下一页链接依赖于我们有多少联系人。
如果我有办法循环使用相同的代码并且仍然可以使用来自' nextpage'的新网址,请告诉我。对象并运行每100个我得到的逻辑?
答案 0 :(得分:0)
psuedo-code,因为我们没有具体的例子可以使用,但是......
大多数带分页的API都会有项目总数。您可以为每次迭代设置最大项目并跟踪它,或者检查null next_object,具体取决于API如何处理它。
List<ApiObject> GetObjects() {
const int ITERATION_COUNT = 100;
int objectsCount = GetAPICount();
var ApiObjects = new List<ApiObject>();
for (int i = 0; i < objectsCount; i+= ITERATION_COUNT) {
// get the next 100
var apiObjects = callToAPI(i, ITERATION_COUNT); // pass the current offset, request the max per call
ApiObjects.AddRange(apiObjects);
} // this loop will stop after you've reached objectsCount, so you should have all
return ApiObjects;
}
// alternatively:
List<ApiObject> GetObjects() {
var nextObject = null;
var ApiObjects = new List<ApiObject>();
// get the first batch
var apiObjects = callToAPI(null);
ApiObjects.AddRange(apiObjects);
nextObject = callResponse.nextObject;
// and continue to loop until there's none left
while (nextObject != null) {
var apiObjects = callToAPI(null);
ApiObjects.AddRange(apiObjects);
nextObject = callResponse.nextObject;
}
return apiObjects;
}
无论如何,根据两种常用的Web服务方法(遗漏了大量细节,因为这不是工作代码,只是为了演示一般方法),这是基本思想。