2017-06-20 186 views
3

我正在为我的项目实现一个API接口。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的想法以及如何实现它。

如果你引导我到任何资源,这将是有益的,所以我可以得到更多的知识。

谢谢。

+0

@apokryfos谢谢你,我知道它太宽泛,但我真的不知道从哪里开始。使用页面令牌优于偏移方法的好处是什么? – kcode

+2

不知道,也许它被用来缓存请求或阻止人们编写任意请求来提取所有数据。这个想法是,如果您获得当前页面并且尚未受到速率限制,您只能获得下一页标记。 – apokryfos

回答

0

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

$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);