假设我有一个支持分页(和过滤)的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()。
答案 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']);
}