thinkphp3.2 restful接口的实现

时间:2022-09-25 20:50:20

参考thinkphp3.2手册  专题=>restful;

REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性.restful借口的实现必不可少的便是路由的运用。

启用路由:在Application\Common\Conf\config.php里开启路由,'URL_ROUTER_ON'   => true, 然后设置路由规则,在模块的配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,每个元素都代表一个路由规则,例如:

    'URL_ROUTE_RULES'=>array(
'news/:id' => 'Index/index',
),
表示Index控制器里面的index方法,在地址栏内输入index.php/Home/news/china.html则会输出china.xml.简单的了解路由规则的定义格式为: '路由表达式'=>'路由地址和传入参数'

在控制器里接收通过路由传过来的值:

<?php
namespace Home\Controller;
use Think\Controller\RestController;
Class IndexController extends Controller {
public function index(){
echo $_GET['id'];
}
}
下面的是天气查询的一个简单小接口的实现:

<?php
namespace Home\Controller;
use Think\Controller\RestController;
Class IndexController extends RestController {

public function index(){
if(__EXT__==""||__EXT__=="html"){
$type='html';
}else{
$type=__EXT__;
}
//print_r(__EXT__);
$pyname = $_GET['id'];
switch ($this->_method){
case 'get': // get请求处理代码
if ($type== 'html'){
// 'html';die;
$data=$this->city($pyname);
//print_r($data);
//Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html。
//$this->response($data,'json');
$result=$this->response($data,'html');
//print_r($result);
return $result;
}elseif($type== 'xml'){
$data = $this->city($pyname);
$result = $this->response($data,'xml');
return $result;
}elseif($type=='json'){
$data=$this->city($pyname);
$result=$this->response($data,'json');
return $result;
}
break;
case 'put': // put请求处理代码
break;
case 'post': // post请求处理代码
break;
}

}

public function city($name){
$sheng=M("sheng");
$city=M("city");
$xian=M("xian");
if($name=='china'){
$res=$sheng->select();
//print_r($res);
return $res;
}else{
//getFieldBy动态查询 根据字段查询并返回某个字段的值
$sid=$sheng->getFieldByPyname($name,'id');
//print_r($sid);die;
if($sid==""){
$cid=$city->getFieldByPyname($name,'id');
if($cid==""){
$xid=$xian->getFieldByPyname($name,'id');
if($xid==""){
echo "没有该地天气数据";
}else{
$condition['id'] = $xid;
$res=$xian->where($condition)->select();
//print_r($res);
return $res;
}
}else{
$condition['p_id'] = $cid;
$res=$xian->where($condition)->select();
// print_r($res);
return $res;
}
}else{
$condition['p_id'] = $sid;
$res=$city->where($condition)->select();
//print_r($res);
return $res;
}
}
}

注意:IndexController继承的是RestController而非Controller;__EXT__表示的是自动检测资源类型.Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html 。  这样,一个简单的天气查询的接口就实现了。