2016-07-28 30 views
0

私は連絡先のリストを取得するためにAPIを呼び出しています(100秒または1000秒の可能性があります)。リストの末尾に 'nextpage'というURLがあり、次の100にURLなどがあります。同じメソッドを複数の異なるパラメータで複数回実行するC#

私のC#コードでは、最初に100を取得していて、何かをするためにループしていて、 nextpageオブジェクトを取得し、URLを取得してAPIなどを再呼び出しします。次のページチェーンは次のようになります。

私は同じコードをループし、 'nextpage'オブジェクトから新しいURLを使用して、100個ごとにロジックを実行できる方法があれば教えてください。私たちは具体的な例で動作するように、しかし...を持っていないよう

+0

なぜクラスのプロパティを使用しないでください。あなたがすでにすべての変数を持っていれば、どういう問題があるのか​​分かりません。 – Arjang

+0

はい、同じ方法をリフレッシュする方法はありますか? – Bokbob

+0

使用したコードをコピーできますか? @Bokbob – 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; 
} 

2つの通常のWebサービス・アプローチ(これはコードの作業だけで一般的なアプローチを実証するものではありませんように、詳細の多くが付いているが、取り残さ)ごとに、とにかく基本的な考え方です。

+0

ありがとうございましたjdl134679、それは魅力のように動作します.. – Bokbob

+0

喜んで助けてください。副次的なことは、Webサービスからすべてを最初に取得し(すべてを1つのコレクションに入れる)、コレクション全体を取得した後でコレクション全体を処理することが大切です。これにより、「Webサービスウィンドウ」が狭くなり、データソースを実際のビジネスロジックから分離するのに役立ちます。 (ここで注目すべき例外は、取得するデータが大量にあり、非同期で処理を開始したい場合です。その場合、そのようなアプローチは少し変わります) – jleach

+0

はい、どれくらいのデータが期待できるかわかりません。しかし、他のコールが最初のコールの結果に依存するなど、すべてのコールは同期的です。 – Bokbob

関連する問題