在Cakephp中编写API最佳实践

时间:2017-01-03 07:20:29

标签: rest api cakephp-2.0

我正在cakephp 2.9中创建一个Web应用程序。它有两个用途,

  1. 提供对Android和Ios设备的API访问
  2. 提供网页(普通网络应用程序)
  3. 目前我正在开发api部分,我创建一个webserviceController.php文件并编写所有的Api,现在我觉得控制器太胖了, 我不知道哪种是管理API的最佳做法。现在我的webservice控制器有超过2000行代码..

    现在我计划在不同的控制器中分离每个api 谁能建议我在cakephp中编写apis的好习惯

    目前我的代码看起来像

    class WebServicesController extends Controller
     {
    
    public $uses = null;
    public $components = array('RequestHandler', 'Verification', 'AppContstant','PushNotification');
    public function users()
    {
        //code to get users
          //
       $this->set(array(
            'result' => $result,
            '_serialize' => 'result'
        ));
    }
    

    和我的route.php

    Router::mapResources('WebServices');
    Router::parseExtensions();
    
    Router::resourceMap(array(
        array('action' => 'users', 'method' => 'GET', 'id' => false),
    

    我在webserviceController中有大约43个api,

    1. 如何管理API的cakephp
    2. 最佳做法是什么?
    3. _serialize vs json_encode()哪个快?
    4. 如何对我的API网址进行版本控制?

2 个答案:

答案 0 :(得分:1)

在cakephp中制作API的最简单方法是直接从控制器打印JSON并通过die()停止渲染。

官方文档建议您为输出提供API视图,这是一种标准的MVC方式,是一种很好的做法。您可以在此处查看更多信息:https://book.cakephp.org/2.0/en/views/json-and-xml-views.html

也许你可以参考Croogo如何实现它,这是一个基于Cakephp的CMS。 他们将API作为管理版本和方法的组件:https://github.com/croogo/croogo/blob/master/Croogo/Controller/Component/BaseApiComponent.php 这是其URL路由的示例,格式为/$version/$model/$method.$format/?$parameters http://www.example.com/croogo-2.2.2/api/v1.0/nodes/lookup.json?type=page&title=how

答案 1 :(得分:1)

Sibin Francis,您可以使用rest api类并包含在您的api控制器中 在顶部添加以下行

 App::import('Vendor', 'REST', array('file' => 'Rest.inc.php'));
 Public function yourFunctionName() {
    if ($this->request->is("post")) {  // Use your method name put/post/get/etc
        $rest = new REST();
       // Your logic here
      return $rest->response(json_encode($data), response_code);
    }
}

非常简单易行。只需要调用供应商Rest Api类。