0

0

thinkphp5.0极速搭建restful风格接口层(实例解析)

藏色散人

藏色散人

发布时间:2020-06-20 13:44:54

|

4322人浏览过

|

来源于csdn

转载

下面由thinkphp框架教程栏目给大家介绍thinkphp5.0极速搭建restful风格接口层实例,希望对需要的朋友有所帮助!

thinkphp5.0极速搭建restful风格接口层(实例解析)

下面是基于ThinkPHP V5.0 RC4框架,以restful风格完成的新闻查询(get)、新闻增加(post)、新闻修改(put)、新闻删除(delete)等server接口层。

1、下载ThinkPHP V5.0 RC4版本;

2、配置虚拟域名(非必须,只是为了方便);

Apache\conf\extra\httpd-vhosts.conf

立即学习PHP免费学习笔记(深入)”;


    DocumentRoot "D:/webroot/tp5/public"
    ServerName www.tp5-restful.com
    
	DirectoryIndex index.html index.php 
	AllowOverride All
	Order deny,allow
	Allow from all
	

3、开启伪静态支持.htaccess文件

apache方法:

a)在conf目录下httpd.conf中找到下面这行并去掉#

LoadModule rewrite_module modules/mod_rewrite.so

b)将所有AllowOverride None改成AllowOverride All

public\.htaccess文件内容:


Options +FollowSymlinks -Multiviews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

4、创建测试数据
tprestful.sql

Text-To-Song
Text-To-Song

免费的实时语音转换器和调制器

下载
--
-- 数据库: `tprestful`
--

-- --------------------------------------------------------

--
-- 表的结构 `news`
--

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='新闻表' AUTO_INCREMENT=1;

--
-- 转存表中的数据 `news`
--

INSERT INTO `news` (`id`, `title`, `content`) VALUES
(1, '新闻1', '新闻1内容'),
(2, '新闻2', '新闻2内容'),
(3, '新闻3', '新闻3内容'),
(4, '房价又涨了', '据新华社消息:上海均价环比上涨5%');

5、修改数据库配置文件
application\database.php

 'mysql',
    // 服务器地址
    'hostname'       => '127.0.0.1',
    // 数据库名
    'database'       => 'tprestful',
    // 用户名
    'username'       => 'root',
    // 密码
    'password'       => '123456',
    // 端口
    'hostport'       => '',
    // 连接dsn
    'dsn'            => '',
    // 数据库连接参数
    'params'         => [],
    // 数据库编码默认采用utf8
    'charset'        => 'utf8',
    // 数据库表前缀
    'prefix'         => '',
    // 数据库调试模式
    'debug'          => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'         => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'    => false,
    // 读写分离后 主服务器数量
    'master_num'     => 1,
    // 指定从服务器序号
    'slave_no'       => '',
    // 是否严格检查字段是否存在
    'fields_strict'  => true,
    // 数据集返回类型 array 数组 collection Collection对象
    'resultset_type' => 'array',
    // 是否自动写入时间戳字段
    'auto_timestamp' => false,
    // 是否需要进行SQL性能分析
    'sql_explain'    => false,
];

6、定义restful风格的路由规则,
application\route.php

7、新建模型
application\index\model\News.php

8、新建控制器
application\index\controller\News.php

method){
			case 'get': 	//查询
				$this->read($id);
				break;
			case 'post':	//新增
				$this->add();
				break;
			case 'put':		//修改
				$this->update($id);
				break;
			case 'delete':	//删除
				$this->delete($id);
				break;
			
        }
    }
    public function read($id){
		$model = model('News');
		//$data = $model::get($id)->getData();
		//$model = new NewsModel();
		$data=$model->where('id', $id)->find();// 查询单个数据
		return json($data);
    }
	
	public function add(){
		$model = model('News');
		$param=Request::instance()->param();//获取当前请求的所有变量(经过过滤)
		if($model->save($param)){
			return json(["status"=>1]);
		}else{
			return json(["status"=>0]);
		}
    }
	public function update($id){
		$model = model('News');
		$param=Request::instance()->param();
		if($model->where("id",$id)->update($param)){
			return json(["status"=>1]);
		}else{
			return json(["status"=>0]);
		}
    }
	public function delete($id){
		
		$model = model('News');
		$rs=$model::get($id)->delete();
		if($rs){
			return json(["status"=>1]);
		}else{
			return json(["status"=>0]);
		}
    }
}

9、测试
a)、访问入口文件,默认在public\index.php

b)、客户端测试restful的get、post、put、delete方法

client\client.php 

 '房价又涨了',
  'content' => '据新华社消息:上海均价环比上涨5%'
);
$api_url = 'http://www.tp5-restful.com/news/4'; 
$rest = new restClient($api_url, $param, 'get');
$info = $rest->doRequest();
//$status = $rest->status;//获取curl中的状态信息


$api_url = 'http://www.tp5-restful.com/news'; 
$rest = new restClient($api_url, $param, 'post');
$info = $rest->doRequest();

$api_url = 'http://www.tp5-restful.com/news/4'; 
$rest = new restClient($api_url, $param, 'put');
$info = $rest->doRequest();

echo '
';
print_r($info);exit;

$api_url = 'http://www.tp5-restful.com/news/4'; 
$rest = new restClient($api_url, $param, 'delete');
$info = $rest->doRequest();
?>

请求工具类
client\ApiClient.php

requestType = strtolower($requestType);
    $paramUrl = '';
    // PATHINFO模式
    if (!empty($data)) {
      foreach ($data as $key => $value) {
        $paramUrl.= $key . '=' . $value.'&';
      }
      $url = $url .'?'. $paramUrl;
    }
      
    //初始化类中的数据
    $this->url = $url;
      
    $this->data = $data;
    try{
      if(!$this->curl = curl_init()){
        throw new Exception('curl初始化错误:');
      };
    }catch (Exception $e){
      echo '
';
      print_r($e->getMessage());
      echo '
';     }        curl_setopt($this->curl, CURLOPT_URL, $this->url);     curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($this->curl, CURLOPT_HEADER, 1);   }        /**    * [_post 设置get请求的参数]    * @return [type] [description]    */   public function _get() {      }        /**    * [_post 设置post请求的参数]    * post 新增资源    * @return [type] [description]    */   public function _post() {        curl_setopt($this->curl, CURLOPT_POST, 1);        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->data);          }        /**    * [_put 设置put请求]    * put 更新资源    * @return [type] [description]    */   public function _put() {            curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT');   }        /**    * [_delete 删除资源]    * delete 删除资源    * @return [type] [description]    */   public function _delete() {     curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'DELETE');      }        /**    * [doRequest 执行发送请求]    * @return [type] [description]    */   public function doRequest() {     //发送给服务端验证信息     if((null !== self::token) && self::token){       $this->headers = array(         'Client-Token:'.self::token,//此处不能用下划线         'Client-Code:'.$this->setAuthorization()       );     }     //发送头部信息     $this->setHeader();        //发送请求方式     switch ($this->requestType) {       case 'post':         $this->_post();         break;          case 'put':         $this->_put();         break;          case 'delete':         $this->_delete();         break;          default:         curl_setopt($this->curl, CURLOPT_HTTPGET, TRUE);         break;     }     //执行curl请求     $info = curl_exec($this->curl);        //获取curl执行状态信息     $this->status = $this->getInfo();     return $info;   }      /**    * 设置发送的头部信息    */   private function setHeader(){     curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->headers);   }      /**    * 生成授权码    * @return string 授权码    */   private function setAuthorization(){     $authorization = md5(substr(md5(self::token), 8, 24).self::token);     return $authorization;   }   /**    * 获取curl中的状态信息    */   public function getInfo(){     return curl_getinfo($this->curl);   }      /**    * 关闭curl连接    */   public function __destruct(){     curl_close($this->curl);   } }

完整代码从我github下载:https://github.com/phper-hard/tp5-restful

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号