2013-10-05 104 views
9

我創建一個REST API,將只能得到和返回JSON數據工作的必要性。CakePHP的REST API刪除.format

我正在關注的蛋糕指導和我的默認路由是這樣的:

GET  /recipes.format 
GET  /recipes/123.format 
POST /recipes.format 
PUT  /recipes/123.format 
DELETE /recipes/123.format 
POST /recipes/123.format 

不過,我真的不喜歡使用「.format」的必要性(在我的情況「以.json」),因爲我只會接受json。

我覺得必須有一個方法來消除這種必要性。我可以使用.htaccess重寫URLS,但我覺得必須有一種方法可以在某個地方的cake setting/config文件中執行此操作。

總之,我想要abe到GET /recipes,並輸出與GET /recipes.json相同的東西。

謝謝!

回答

15

我假設你正在使用的RequestHandler component。再一個辦法是硬編碼在控制器的extensionbeforeFilter()回調:

public function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->RequestHandler->ext = 'json'; 
} 

這樣,它總是使用JSON查看和合適的響應頭,即使extension parsing啓用,並提供無以.json擴展在URL中。

另一種選擇是在您的個人控制器操作使用RequestHandlerComponent::renderAs()

public function index() 
{ 
    $this->RequestHandler->renderAs($this, 'json'); 
    ... 
} 

這將有同樣的效果,但你需要做的這一切行動的,所以萬一控制器僅目的是處理REST請求,你最好重寫擴展。

+0

這兩個工作非常好,簡單。非常感謝,我想我最終會用beforeFilter覆蓋。非常簡單,謝謝! – Thomas

+0

wtf?爲什麼每個REST手冊都缺少這個功能?爲我工作。謝謝你非常多:) – west44

+0

與蛋糕工作正常3.2 – Rito

4

首先,設置你的routes.php文件路由器。

Router::parseExtensions("json");

然後RequestHandler組件到控制器添加(必須自動MIME類型識別由HTTP報頭和選擇正確的視圖類)。

public $components = array('RequestHandler');

現在,你可以通過指定HTTP Accept頭具有相同效果的接收JSON詢問與上傳.json擴展,任何控制器的方法,無擴展需要被指定。

curl -H "Accept: application/json" http://example.com/recipies

+0

這工作很好,謝謝,雖然我最終與ndm提供的解決方案滾動,因爲它否定了每個請求發送額外的標頭的必要性。雖然謝謝! – Thomas