2016-07-28 1 views
0

나는 한 번에 100 개만 목록을 나열하는 연락처 목록을 얻기 위해 API를 호출하며 한 번에 100 개만 목록을 표시하고이 페이지 매기기 옵션에 'nextpage'라는 URL의 끝에있는 객체와 다음 100에 대한 URL 등등 ..C에서 다른 매개 변수를 사용하여 같은 방법을 여러 번 실행하기

내 C# 코드에서 처음 100 개가 나오고 있고 (무언가를하기 위해) 루핑되어 ' nextpage '객체를 만들고 URL을 가져 와서 API를 다시 호출하는 등의 작업을 수행합니다. 다음 페이지 체인은 다음과 같이 보입니다.

동일한 코드를 반복하면서 'nextpage'개체의 새 URL을 사용할 수 있고 100을 얻을 때마다 논리를 실행할 수 있는지 알려 주실 수 있습니까? 우리가 구체적인 작업 할 예,하지만 ...이 없기 때문에

+0

클래스의 속성을 사용하여 유지하지 않는 이유는 무엇입니까? 정말로 문제가 뭔지 잘 모르겠다. 만약 당신이 이미 모든 변수를 가지고 있다면 왜 그 변수들을 참조하지 않는가? – Arjang

+0

그래,하지만 같은 방법을 refire하는 방법? – Bokbob

+0

사용한 코드를 복사 할 수 있습니까? @ 복본 – MoustafaS

답변

0

사이비 코드는 페이지 매김와

대부분의 API는 항목의 총 수있을 것이다. 반복마다 최대 항목을 설정하고이를 추적하거나 API가 처리하는 방법에 따라 null next_object를 확인할 수 있습니다. 두 개의 일반적인 웹 서비스 방식에 따라, 어쨌든 기본적인 생각이다

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; 
} 

(이 코드를 작동하지만 일반적인 접근 방식을 보여주기 위해 의미되지 않는 세부의 많은이, 왼쪽으로).

+0

감사합니다. jdl134679, 매력처럼 작동합니다. – Bokbob

+0

기꺼이 도와 드리겠습니다. 참고로, 웹 서비스의 모든 것을 먼저 검색하고 (모든 것을 하나의 콜렉션에 넣는), 전체 콜렉션을 검색 한 후에 전체 콜렉션을 처리하는 것이 좋습니다. 이렇게하면 "웹 서비스 창"이 좁아지고 실제 비즈니스 논리에서 데이터 소스를 분리하는 데 도움이됩니다. (얻을 수있는 많은 양의 데이터를 비동기식으로 처리하기를 원한다면 주목할만한 예외가 될 것입니다.이 경우에는 그런 접근 방식이 조금 바뀝니다.) – jleach

+0

예, 데이터에 대해서는 우리가 얼마나 많이 예상했는지 확신 할 수 없습니다. 그러나 첫 번째 통화의 결과에 따라 다른 통화가 다르기 때문에 모든 통화가 동기식입니다. – Bokbob