CakePHP - 为我的cakephp应用程序创建API

时间:2013-08-19 13:03:14

标签: php api cakephp cakephp-2.0

我创建了一个功能齐全的CakePHP Web应用程序。现在,我想把它提升到一个新的水平,让我的应用程序更“开放”。因此,我想创建一个RESTful API。在CakePHP文档中,我找到了这个链接(http://book.cakephp.org/2.0/en/development/rest.html),它描述了使您的应用程序RESTful的方法。我在routes.php中添加了所需的两行,如链接顶部所示,现在我想测试它。 我有一个UsersController.php控制器,其中有一个函数add(),它将新用户添加到数据库。但是当我尝试在mydomain.com/users.json下浏览时(即使使用HTTP POST),这会返回我的网页,而不是像我期望的那样返回json格式的页面。

现在我认为我做错了什么或者我没有正确理解。实际发生了什么,你能帮助我一点吗?

谢谢你的推荐!

1 个答案:

答案 0 :(得分:9)

您需要解析JSON扩展。所以在 routes.php 文件中添加:

Router::parseExtensions('json');

因此您可以像http://example.com/news/index一样访问http://example.com/news/index.json之类的网址。

要实际返回JSON,您需要修改控制器方法。您需要在操作中设置_serialize键,这样您的新闻控制器可能如下所示:

<?php
class NewsController extends AppController {

    public function index() {
        $news = $this->paginate('News');
        $this->set('news', $news);
        $this->set('_serialize', array('news'));
    }
}

这是基础知识。对于POST请求,您将需要使用RequestHandler组件。将其添加到您的控制器:

<?php
class NewsController extends AppController {

    public $components = array(
        'RequestHandler',
        ...
    );

然后您可以检查传入的请求是否使用 .json 文件扩展名:

public function add() {
    if ($this->RequestHandler->extension == 'json') {
        // JSON request
    } else {
        // do things as normal
    }
}