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;
}
}
必要な入力を生成するコードを作成し、それを使ってコードをテストする必要があります。 –
私は自分のAPIをビルドしてリクエストを行う必要がありますか?私はそれが、「それはうまくいかない」とか「もっと良い方法がある」と言っている人を好んで過度のことを望んでいました。 –
誰かがそれをやるとしましょう。残念ながら、テストが行われない限り、それはただの意見に過ぎないので、それに代わるものはありません。 –