在PHP客户端库中处理分页的最佳方法

时间:2019-05-15 22:59:19

标签: php rest pagination api-design

假设我有一个支持分页(和过滤)的REST API。在执行对myapi.com/api/users的GET请求后,它将返回如下内容:

{
  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 :(得分:0)

您只需保留过滤器并浏览所有页面。像这样:

$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']);
}