•  

【TFWEB】RESTFul接口的开发技巧

发表于 2018-07-05,阅读 1

介绍

介绍

今天我们学习一下 TFWEB 下的API路径规范

规范

资源示例

标准资源路径

获取 user 列表数据

GET /user

视图文件:Views.user.inc.php

视图对象:TFResource_user

获取 user 值为 3 的单行数据

GET /user/3

视图文件:Views.user.inc.php

视图对象:TFResource_user

带版本号的资源路径

获取 2.0 版本的 user 的列表数据

GET /v2.0/user

视图文件:Views.user.inc.php

视图对象:TFResource_user

获取 2.0 版本的 user 值为 3 的单行数据

GET /v2.0/user/3

视图文件:Views.user.inc.php

视图对象:TFResource_user

多级资源路径

获取 team 值为 boss 的 user 的列表数据

GET /team/boss/user

视图文件:Views.team.user.inc.php

视图对象:TFResource_team_user

获取 team 值为 boss 的 user 值为 3 的单行数据

GET /team/boss/user/3

视图文件:Views.team.user.inc.php

视图对象:TFResource_team_user

带版本号的多级资源路径

获取 1.2 版本的 team 值为 boss 的 2.0 版本的 user 的列表数据

GET /v1.2/team/boss/v2.0/user

视图文件:Views.team.user.inc.php

视图对象:TFResource_team_user

获取 1.2 版本的 team 值为 boss 的 2.0 版本的 user 值为 3 的单行数据

GET /v1.2/team/boss/v2.0/user/3

视图文件:Views.team.user.inc.php

视图对象:TFResource_team_user

带扩展属性的资源路径

扩展属性已“_”开头,可以用来对获取指定资源的数据进行基本刷新(需要在Models里编写相应的处理逻辑):

获取 user 列表数据,携带扩展属性 _baseInfo

GET /user/_baseInfo

视图文件:Views.user.baseInfo.inc.php

视图对象:TFResource_user_baseInfo

获取 user 值为 3 的单行数据,携带扩展属性 _fullInfo

GET /user/3/_fullInfo

视图文件:Views.user.fullInfo.inc.php

视图对象:TFResource_user_fullInfo

TFAPI的RESTFul系统架构

解析程序

资源路径解析程序通过系统对象 RouteMap 处理,需要指定 RESTFul 接口的根目录路径

$routeMapObj->addRESTRule(
                  "api", // 虚拟路径,对外开放的相对路径
                  "api" // 物理路径,服务器的真实相对路径
              );

处理程序

接口根目录处理程序 REST.php,该程序通过 TFRESTLoader 对象实现服务器端资源调用。把这个文件放置在上述设置的接口根目录上,文件内容如下

class TFREST extends FieldSystemRest {
    
    public function __construct($opts){
        parent::__construct($opts);
    }
    
    protected function prepareData(){
        $myRESTLoaderObj = new TFRESTLoader($this->PEO);
        $myRESTLoaderObj->auth(
                
                // enable auth
                true,
                
                // rules
                array(
                
                    // default auth method
                    'default'=>"default",
                    
                    // other auth methods
                    'matches'=>array(
                        
                        "user.table"=>"admin",
                    
                    ),
                    
                    // no auth modals
                    'noAuthModels'=>array(
                    
                        "user.loginUser"=>true,
                    ),
                    
                )
            );
        $myRESTLoaderObj->load($this->PEO->input->server->TFREST);
        return $myRESTLoaderObj->getData();
    }
}

$pageObj = new TFREST(array(

    ));
$pageObj->OP();

用户资源开发

用户资源开发通过建立继承于 TFResource 的对象实现,解析程序会调用指定资源的该对象的 load 方法。

资源文件

每个资源都需要实现一个用于REST的视图文件,这个文件用于响应REST方式请求资源的处理程序。

存储目录

存储在 WEB-INF/Views/REST/ 目录下,以资源名称作为文件名,扩展名为 inc.php。

例如:WEB-INF/Views/REST/user.inc.php。

如果包含版本信息的话,则将版本信息放到资源名称前面以“_”分隔,同时将版本信息中的“.”替换为“_”。

例如:WEB-INF/Views/REST/v1_2_user.inc.php。

对象命名规则

对象命名规则 TFResource_[资源名称]。

例如:TFResource_user。

示例

class TFResource_user extends TFResource {

    protected function prepareTableData($opts){
        $datas = $this->model->getTableBySql("select * from tfart_users#", array(
            'pageSize'=>10,
            'pageNumber'=>$this->PEO->input->get->pn,
        ));
        return $datas;
    }

    protected function prepareRowsData($IDs, $opts){
        return $this->model->gets($IDs);
    }

    protected function prepareRowData($ID, $opts){
        return $this->model->get($ID);
    }
}

扩展资源文件

很多时候我们需要在不同情况下对同样的资源提取一部分数据。又或者是出于安全考虑在特定情况下隐藏一部分数据。

这个时候就需要对同一个资源做扩展处理,扩展资源程序要放到扩展资源文件里。

存储目录

存储在 WEB-INF/Views/REST/[资源名称]/ 目录下,以资源扩展名称作为文件名,扩展名为 inc.php。

例如:WEB-INF/Views/REST/user/baseInfo.inc.php。

对象命名规则

对象命名规则 TFResource_[资源名称]_[扩展资源名称]。

例如:TFResource_user_baseInfo。

示例

扩展资源的格式与标准资源是一样的

资源数据加载程序

资源对象 TFResource 会根据输入参数自动选择调用内建方法 loadTable、loadRows、loadRow 获取相应的数据。

内建方法

选择内建方法的原则:

a)如果请求资源没有带参数,则请求 loadTable

b)如果请求资源参数包含“,”,则请求 loadRows

c)如果请求资源参数为普通参数,则请求 loadRow

我们可以通过重载 prepareTableData、prepareRowsData、prepareRowData 来响应相应的方法返回数据

class TFResource_user extends TFResource {

    protected function prepareTableData($opts){
        return $datas;
    }

    protected function prepareRowsData($ID, $opts){
        return $datas;
    }

    protected function prepareRowData($IDs, $opts){
        return $datas;
    }
}

资源数据过滤程序

从数据库中提取出来的数据一般是不能直接推到视图层的,我们需要做简单的“加工”处理。

这部分工作可以在数据过滤方法里完成。

示例

protected function filterRowData(&$rowData){
    
}

资源数据处理程序

如果提交方式为非GET方式,则触发处理程序函数

说明

a)当提交方式为POST,则系统调用actionAdd方法,并将用户数据以数组作为参数传入

b)当提交方式为PUT,则系统调用actionMod方法

c)当提交方式为DELETE,则系统调用actionDel方法

d)当提交方式为POST、PUT、DELETE,且包含扩展属性的时候,则系统调用名称为 action_[扩展属性] 的方法

示例

POST http://host/api/user

protected function actionAdd(){

}

PUT http://host/api/user/66

protected function actionMod(){

}

DELETE http://host/api/user/66

protected function actionDel(){

}

POST http://host/api/user/_addVIP

protected function action_addVIP(){

}

PUT http://host/api/user/66/_modVIP

protected function action_modVIP(){

}

DELETE http://host/api/user/66/_delVIP

protected function action_delVIP(){

}

独立资源数据处理程序

如果不想将所有处理方法都放到一个对象里实现,则可以使用单独的文件保存处理程序。

存储目录

存储在 WEB-INF/Views/REST/[资源名称]/ 目录下,以 action_[方法名称] 为文件名称。

例如:WEB-INF/Views/REST/user/action_photo.inc.php。

对象命名规则

对象命名规则 TFResource_[资源名称]_[方法名称]。

例如:TFResource_user_photo。

示例

class TFResource_user_photo extends TFResource {

    protected function prepareAction(){
        return $this->actionResultData("SUCCESS", "ok");
    }
}


鬼谷子叔叔
  • 日志:126
  • 回复:13

进入ta的主页