在Controller中处理REST请求的正确方法是什么

时间:2014-01-22 05:15:24

标签: rest cakephp cakephp-2.4

我为“应用程序”表创建了一个控制器。 Web和REST界面正在运行,但我认为添加和编辑功能应该更好。

当我测试添加和编辑时,我发现需要以Web FORM格式(而不是JSON)发布数据。

我发现我需要在保存中使用“$ this-> request-> input('json_decode')”来解码JSON数据。我以为这是自动发生的。

此功能现在适用于添加(编辑类似)并显示我的json / add.ctp,因此我可以将成功记录返回给用户。

public function add() {
    if ($this->request->is('post')) {
        $this->Application->create();

        //Is the request REST passing a JSON object?
        if (preg_match('/\.json/', $this->request->here)){
            //This is a REST call
            $this->set('status', $this->Application->save($this->request->input('json_decode')));
        } else {
            //This is an interactive session
            if ($this->Application->save($this->request->data)) {
                $this->Session->setFlash(__('The application has been saved.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The application could not be saved. Please, try again.'));
            }
        }
    }
}

我使用“$ this-> request-> here”查看它是否以“.json”结尾。这是处理REST调用的“正确”方法吗?

2 个答案:

答案 0 :(得分:1)

CakePHP Book中有一整节用于此。我想它会回答你的问题:

http://book.cakephp.org/2.0/en/development/rest.html

答案 1 :(得分:0)

问题是,您的操作是否接受JSON数据&表格数据?或者只是JSON数据?

.json纯粹是为了输出您的数据,您可以发送带有.xml扩展名的JSON数据,区别在于数据被消毒后,它将以XML格式输出。

if($this->request->is('post')) {
        if(empty($this->request->data)){
            $data = $this->request->input('json_decode', TRUE);
        } else {
            $data = $this->request->data;
        }
} else {
        $data = $this->params['url'];
}

上面是您应该做的事情,检查数据是否来自表单,如果不是,解码JSON,如果它不是POST,则保存已包含在URL中的参数。

我并不是说上述是“正确”的方式,但这可能就是你要找的东西。