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请求,则最好覆盖扩展.
首先,在routes.php文件中设置路由器。
Router::parseExtensions("json");
然后将 RequestHandler 组件添加到控制器(通过 HTTP 标头自动识别 MIME 类型并选择正确的视图类需要它)。
public $components = array('RequestHandler');
现在,您可以接收 JSON 查询任何具有 .json 扩展名的控制器方法,或者通过指定具有相同效果的 HTTPAccept标头,而无需指定扩展名。
curl -H "Accept: application/json" http://example.com/recipies
| 归档时间: |
|
| 查看次数: |
3150 次 |
| 最近记录: |