Cakephp REST API消除了.format的必要性

Tho*_*mas 9 api rest json cakephp-2.0

我正在创建一个只能获取和返回JSON数据的REST API.

我正在关注蛋糕指南,我的默认路线是这样的:

GET     /recipes.format
GET     /recipes/123.format
POST    /recipes.format
PUT     /recipes/123.format
DELETE  /recipes/123.format
POST    /recipes/123.format
Run Code Online (Sandbox Code Playgroud)

但是,我真的不喜欢使用".format"(在我的情况下是".json")的必要性,因为我只会接受json.

我觉得必须有办法消除这种必要性.我可以使用.htaccess来重写URL,但我觉得必须有一种方法可以在某个地方的蛋糕设置/配置文件中执行此操作.

简而言之,我想要abe to GET /recipes并让它输出同样的东西GET /recipes.json.

谢谢!

ndm*_*ndm 15

我假设您正在使用该RequestHandler组件.一种方法是在控制器回调中硬编码扩展beforeFilter():

public function beforeFilter()
{
    parent::beforeFilter();
    $this->RequestHandler->ext = 'json';
}
Run Code Online (Sandbox Code Playgroud)

这样它就会始终使用JSON View和相应的响应头,即使启用了扩展解析并且URL中提供了非.json扩展名.

另一个选择是RequestHandlerComponent::renderAs()在您的个人控制器操作中使用:

public function index()
{
    $this->RequestHandler->renderAs($this, 'json');
    ...
}
Run Code Online (Sandbox Code Playgroud)

这会产生相同的效果,但您需要在所有操作中执行此操作,因此,如果控制器的唯一目的是处理REST请求,则最好覆盖扩展.


And*_*nik 5

首先,在routes.php文件中设置路由器。

Router::parseExtensions("json");

然后将 RequestHandler 组件添加到控制器(通过 HTTP 标头自动识别 MIME 类型并选择正确的视图类需要它)。

public $components = array('RequestHandler');

现在,您可以接收 JSON 查询任何具有 .json 扩展名的控制器方法,或者通过指定具有相同效果的 HTTPAccept标头,而无需指定扩展名。

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