Лучший способ обработки нумерации страниц в клиентской библиотеке PHP - PullRequest
0 голосов
/ 16 мая 2019

Предположим, у меня есть REST API, который поддерживает разбиение на страницы (и фильтрацию). После выполнения запроса GET к myapi.com/api/users он возвращает что-то вроде этого:

{
  total: 100
  data: . . .
  first_page_url: "/?page=1"
  from: 0 
  next_page_url: "/?page=2"
  path: "/"
  per_page: 10
  prev_page_url: null
  to: 10
}

А затем в моей клиентской библиотеке PHP есть что-то похожее на эту функцию для функции, которая выполняет этот запрос и возвращает ответ JSON в виде ассоциативного массива:

public function users($page = 1, $verified = null, $admin = null, $joined = null, $active_until = null, $banned_until = null, $referral_code = null) {
    . . .
}

Как лучше всего получить следующий результат? Я предполагаю что-то вроде этого:

$users = [];
$request = users(); // gets the first page
while ($request) {
    $request = next_users();
    array_push($users, $request['data']);
}

Проблема в том, что я понятия не имею, с чего начать, когда дело доходит до помещения результата users () в next_users () при сохранении любых значений фильтра (необязательных параметров users ()), причем при элегантном выполнении. Я попытался осмотреться, но я не могу найти много результатов API-клиентов, обрабатывающих нумерацию страниц. Как показано выше, идеальным сценарием будет способность получать следующую страницу результатов, пока не останется ничего с next_users ().

1 Ответ

0 голосов
/ 16 мая 2019

Вы просто сохраняете свой фильтр и просматриваете все страницы. Примерно так:

$filter = [
    $admin = true,
    $joined = null,
    $active_until = null,
    $banned_until = null,
    $referral_code = "RJ08"
];
$page = 1;
$response = users($page, ...$filter); // gets the first page
$usersData = $response['data'];
while (null !== $response['next_page_url']) {
    $response = users(++$page, ...$filter);
    array_push($usersData, $response['data']);
}
...