2017-06-20 179 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);