2010-10-20 96 views
1

閱讀http://blog.programmableweb.com/2007/04/02/12-ways-to-limit-an-api/我想知道如何完成基於時間的限制(即每秒1個呼叫)。那麼,如果需要認證,方法是比較PHP的時間函數跟蹤秒(例如,if ($previous_call_time == $current_call_time) { ... })?還有其他建議嗎?如何限制API調用?

+1

有什麼建議?如果你需要時間限制,除了實際比較時間之外,我沒有看到任何其他方法。 – casablanca 2010-10-20 04:38:21

回答

4

使用簡單的緩存:

if(filemtime("cache.txt") < (int)$_SERVER["REQUEST_TIME"] - 3600) { // 3600 is one hour in seconds 
    $data = file_get_contents("http://remote.api/url/goes/here"); 
    file_put_contents("cache.txt", $data); 
} else 
    $data = file_get_contents("cache.txt"); 

像這樣將節省API的價值,並讓,只要你想,同時還限制多久,你實際上是從進料拉日你得到的信息。

希望這會有所幫助!

+0

這實際上有很大的幫助。謝謝! – madhushankarox 2018-02-05 12:25:55

1

更一般的限制條件是「每個'期間的通話次數'」。例如 - 每小時,就像twitter一樣。

通過向每個請求的mysql添加記錄,您可以跟蹤當前執行的請求的數量。

這種方式更高性能的解決方案是使用memcached並遞增「key」(user_id + current_hour)。

-1

需要考慮的事情:您可以使用外部服務來執行此操作,而不是自己構建它。例如。我的公司WebServius(http://www.webservius.com)目前支持可配置的每個API和每個API關鍵節制,而且我們很可能會添加更多的功能,例如「自適應節流」(當API響應變慢時自動節制使用)。