用於Web應用程序(圖像數據庫)我正在使用Restful服務器模塊。該數據是由另一個Web應用程序(一家商店)請求的。 XML的生成需要1秒鐘。商店必須等待API回答以顯示例如產品頁面。是否有可能爲Restful Server API激活一些緩存?Silverstripe - Restful服務器緩存
我已經嘗試過Static Publisher,但它似乎只適用於cms頁面。 非常感謝, 弗洛裏安
用於Web應用程序(圖像數據庫)我正在使用Restful服務器模塊。該數據是由另一個Web應用程序(一家商店)請求的。 XML的生成需要1秒鐘。商店必須等待API回答以顯示例如產品頁面。是否有可能爲Restful Server API激活一些緩存?Silverstripe - Restful服務器緩存
我已經嘗試過Static Publisher,但它似乎只適用於cms頁面。 非常感謝, 弗洛裏安
好,我個人會緩存客戶端(因此在店)
上,但如果你有,我不認爲有任何內置該方式。 你可以繼承的寧靜服務器,並做一些基本的緩存自己(只是方式默認SS RestfulClient做它,將它保存到一個文件)
class MyServer extends RestfulServer {
public $cache_expire;
function __construct($cache_expire = 3600) {
$this->cache_expire = $cache_expire;
}
protected function getHandler($className, $id, $relationName) {
$cache_path = Director::getAbsFile("assets/rest-cache/$className-$id-$relationName.{$this->request->getExtension()}");
if ($this->cache_expire > 0 && !isset($_GET['flush'])
&& @file_exists($cache_path) && @filemtime($cache_path) + $this->cache_expire > time()
) {
$store = file_get_contents($cache_path);
$response = unserialize($store);
} else {
$response = parent::getHandler($className, $id, $relationName);
$store = serialize($response);
file_put_contents($cache_path, $store);
}
return $response;
}
}
//注意,我從來沒有測試此代碼,所以你可能會遇到輕微的拼寫錯誤或類似的東西
RestfulService爲您做緩存。它接受2個參數。 serviceURL和緩存時間。默認值是3600(1小時)。如果店鋪是用銀色條紋製作的,這隻會起作用。
$serviceURL = 'http://www.imagedatabase.com/api/v1/Product?ID=1';
$service = new RestfulService($serviceURL, 7200); //2 hours expiry
$xml = $service->request()->getBody();
//get fields values
$productName = $service->searchValue($xml, 'Name');
$productPrice = $service->searchValue($xml, 'Price');
您還需要進行修改,以產品假設產品是一個數據對象。
class Product extends DataObject {
...
static $api_access = true;
...
function canView($member = null) {
return true;
}
}
RestfulService文檔 http://doc.silverstripe.org/framework/en/reference/restfulservice
我還沒有聽說過一個解決方案的......但根據什麼正在採取這麼多時間,AJAX的查詢可以被緩存客戶端或者如果它是服務器本身,也許可以將XML結果作爲文件保存在服務器上,並將查詢的哈希值作爲名稱進行保存? – colymba