thinkphp3.2 restful接口的实现

来源:互联网 发布:相关人工智能的书籍 编辑:程序博客网 时间:2024/05/16 00:30

参考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.简单的了解路由规则的定义格式为:'路由表达式'=>'路由地址和传入参数'

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

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

<?phpnamespace 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 。  这样,一个简单的天气查询的接口就实现了。

0 0
原创粉丝点击