2015-02-09 77 views
0

最近我正在用CakePHP編寫一個小型網頁。我的大多數模型都代表必須通過外部API收集的數據,HttpSocket組件提供CakePHP 2.xCakePHP + HttpSocket組件+ Restful API

這是最主要的原因,我包括在AppModel.php

public function get ($url, $options = array()) { 
    $options += $this->default; 
    $url .= 'api_key=' . $options['api_key']; 
    $hs = new HttpSocket(); 

    return $hs->get($url); 
} 

下面的方法我想採取一些措施,來控制時間的CakePHP調用API的數量,因爲它有它的侷限性(每分鐘100請求例如1000每小時)

完成此操作的最佳方法是什麼? 我想到了有關在新表的要求存儲數據,但我不知道我是否可以從AppModel.php

做查詢,謝謝

回答

0

我將創建一個新的表像api_call_log和增加計數。你可以簡單地在你的AppModel得到一個模型實例:

$ApiCallLog = ClassRegistry::init('ApiCallLog') 
$ApiCallLog->log(); 

把你的邏輯,計數到模型的方法,當你需要傳遞參數,不知道你可能需要什麼。

而不是把它放在AppModel中,行爲可能是一個更好的地方,你可以在那裏實現額外的方法以及你的代碼增長,並只附加到需要它的模型。

另一種很可能比使用SQL DB更少資源的方法是使用Redis緩存。因此,使用Cache :: read()和Cache :: write()來獲取實際的計數並將其增加。如果您獲得API的LOT請求,這很可能是更好的選擇。如果在計數和遞增操作期間未鎖定表,則可能會使用SQL DB發生衝突。我從來沒有這種情況,但我不會指望它不會發生。

附加說明:get()非常通用名,我會將它重命名爲httpGet()。不特定的名稱可能會非常混亂,特別是如果其他類中有相同名稱的方法。

+0

我會在接下來的幾天嘗試這兩個選項(數據庫和緩存)。 'get'方法名不依賴於我,是CakePHP組件的一部分。 感謝您的回覆。 – Tzaoh 2015-02-09 21:13:59