2016-08-02 10 views
0

複数のAPIリクエストから1つの配列(表示用)にデータをプルしようとしていますが、APIは一度に取り出せるレコード数を制限しています。残念ながら、私は再帰をテストするのに十分なクライアント購入を持っていないので、誰かが私のテストクラスを見て、それがうまくいくかどうかを見て欲しいと思っています。APIレコード数に基づくPHP再帰関数

これまで私がこれまで持っていたことは次のとおりです。リクエストメソッドはパラメータ$ serviceと$ pageをとり、そこに「recsindb」がいくつあるかによって$ pageをインクリメントします。たとえば、recsindb = 50の場合、$ pageは各セットの10レコードで5倍に増やす必要があります。ここで

は、私が書いたコードです:

$check = new testClass; 

// API services to loop through 
$services = array(
    "dns" => "domains/search.json", 
    "webservices" => "webservices/search.json", 
    "singledomainhostinglinuxus" => "singledomainhosting/linux/us/search.json", 
    "singledomainhostinglinuxuk" => "singledomainhosting/linux/uk/search.json" 
); 

// foreach service, assign a key to identify the data in the display 
foreach ($services as $key => $value) { 
    $data[$key] = $check->getData($value); 
} 

// Let's see what we got 
echo "<pre>" . print_r($data, TRUE) . "</pre>"; 

class testClass { 

    function getData($api) { 
     $fullurl = "https://myapipath/" . $api . "?" . $this->buildstring(); 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_HEADER, 0); 
      curl_setopt($ch, CURLOPT_URL, $fullurl); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      $data = curl_exec($ch); 
      curl_close($ch); 
     return json_decode($data, true); 
    } 

    // Array key => value pairs 
    private $parts = array(); 

    public function add($key, $value) { 
     $this->parts[] = array(
      'key' => $key, 
      'value' => $value 
     ); 
    } 

    // Build the query string 
    public function buildstring($separator = '&', $equals = '=') { 
     $queryString = array(); 

     foreach ($this->parts as $part) { 
      $queryString[] = urlencode($part['key']) . $equals . urlencode($part['value']); 
     } 

     return implode($separator, $queryString); 
    } 

    // recursive function 
    public function request($service, $page) { 
     $count = 10; // 10 records is the minimum allowed to request 
     $this->add(array('no-of-records', $count)); 
     $this->add(array('page-no', $page)); 
     $data = $this->getData(array($service, TRUE)); 

     if ($data[0]['recsindb'] > $page * $count) { 
      $data = $this->request($service, $page + 1); 
     } 
     return $data; 
    } 
} 
+1

必要な入力を生成するコードを作成し、それを使ってコードをテストする必要があります。 –

+0

私は自分のAPIをビルドしてリクエストを行う必要がありますか?私はそれが、「それはうまくいかない」とか「もっと良い方法がある」と言っている人を好んで過度のことを望んでいました。 –

+1

誰かがそれをやるとしましょう。残念ながら、テストが行​​われない限り、それはただの意見に過ぎないので、それに代わるものはありません。 –

答えて

0

私はプロセスをシミュレートするために、データベースおよびAPIサービスを作成することになりました。今のところ、array_mergeを使ったこのリクエストメソッドは、私が探しているものと思われます。

// recursive function 
public function request($service, $page) { 
    $count = 10; 
    $this->add('no-of-records', $count); 
    $this->add('page-no', $page); 
    $data = $this->getData($service); 

    if ($data['recsindb'] > $page * $count) { 
     $data = array_merge($data, $this->request($service, $page + 1)); 
    } 
    return $data; 
}