API分页,如何实现页面令牌分页方法?

时间:2017-06-20 16:22:19

标签: php rest pagination

我正在为我的项目实现API接口。

据我所知,有不同的形式可以通过结果进行分页,如下所示:

https://example.com/api/purchaseorders?page=2&pagesize=25  

但是,我看到很多像谷歌这样的API使用不同的方法,他们使用" pageToken"让用户在结果页面之间移动,例如:

https://example.com/api/purchaseorders?pagesize=25&pageToken=ClkKHgoRc291cmNlX2NyZWF0ZWRfYXQSCQjA67Si5sr

因此他们使用page=2代替pageToken=[token]

我不清楚pageToken的概念以及如何实现它。

如果您引导我使用任何资源,这将有所帮助,以便我可以获得更多知识。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的独立示例,使用文件系统作为键值存储(因为文件系统始终可用)。

$requestParameters = [];
if (($token = filter_input(INPUT_GET,"pageToken")) && is_readable("/tmp/$token")) {
   $requestParameters = file_get_contents("/tmp/$token");
} else {   
    $requestParameters = [
       "q" => filter_input(INPUT_GET,"q"),
       "pageSize" => filter_input(INPUT_GET,"pageSize",FILTER_VALIDATE_INT),
       "page" => filter_input(INPUT_GET,"page",FILTER_VALIDATE_INT)
   ];
}

$nextPageRequestParameters = $requestParameters;
$nextPageRequestParameters["page"]++;

$nextPageToken = md5(serialize($nextPageRequestParameters)); //This is not ideal but at least people can't guess it easily. 


file_put_contents("/tmp/$nextPageToken", serialize($nextPageRequestParameters));

//Do request using $requestParameters 
$result = [ "nextPageToken" => $nextPageToken, "data" => $resultData ];
echo json_encode($result);