介绍
今天我们学习一下 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
资源路径解析程序通过系统对象 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");
}
}