1.传统的是采用混编(html+php)或模板(tpl)的方式进行设计
2.前后端分离主要通过后端提供 API 接口返回的 json 数据交给前端渲染;
这样,后端程序员就专心提供数据,而前端程序员拿数据专心做渲染即可;
3.RestFul Api 是一种设计风格,推荐的一种规范,有助于统一协同和管理
什么是RestFul Api 风格 参考地址
http://restful.p2hp.com/ http://www.ruanyifeng.com/blog/2014/05/restful_api.html
安装
tp6要求的php版本为PHP >= 7.1.0
下载方式只能通过composer安装
基础的环境搭建,和composer的安装就不介绍了
composer create-project topthink/think tpapi //安装 composer update topthink/framework //更新
C:\Windows\System32\drivers\etc 增加
127.0.0.1 api.tp6.com
php think run -H api.tp6.com
在.env
(默认没有这个只有.example.env复制一份重命名即可) 和config/database.php
中配置 mysql 的用户密码以便连接
php think make:controller User --api
php think make:model User
在控制器index方法中尝试获取数据,具体代码如下
use app\model\User as UserModel; public function index() { return UserModel::select(); }
然后访问
http://api.tp6.com:8000/user
然后根据给出的提示调试到正确为止
在phpstorm中发现没有提示,这点tp6还比较坑。
如果没有代码提示,把 tp5.1 的注解可以暂时复制过来;
解决方法:关闭调试,并且在 config/app.php 中打开错误信息即可;
然后刷新后发现清楚了
为什么第一个方法是可以的呢?因为我们没有设置强制路由,但是后面的方法就没办法了
再次访问:
定义那一个资源路由就相当于定义了以下几个路由
标识 | 请求类型 | 生成路由规则 | 对应操作方法(默认) |
---|---|---|---|
index | GET | user | index |
save | POST | user | save |
read | GET | user/:id | read |
update | PUT | user/:id | update |
delete | DELETE | user/:id | delete |
如何验证?
php think route:list
我们创建一个 Base 抽象基类,专门用于提供给子类实现 api 生成;
<?php namespace app\controller; abstract class Base { protected function create($data, $msg = '', $code = 200, $type = 'json') { //返回 api 结果 $result = [ //状态码 'code' => $code, //自定义消息 'msg' => $msg, //数据返回 'data' => $data ]; //将数据返回成指定格式,默认 json return \think\Response::create($result, $type); } }
通过 Base 基类的继承,我们想创建一个获取全部用户列表的 api 接口;
//获取数据列表 $data = \app\model\User::field('id,username,email')->select(); //查询所有数据 return $this->create($data, $data->isEmpty() ? '数据不存在' : '数据请求成功');
查找特定主键数据,这时肯定找不到,那么就会输出数据不存在
//获取数据列表 $data = \app\model\User::field('id,username,email')->select([200,201]); //查询所有数据 return $this->create($data, $data->isEmpty() ? '数据不存在' : '数据请求成功');
直接采用 page()方法,这个方法来源于 limit()方法,可以手动控制的灵活些