Yii2.0 RESTful API 基础配置教程详解
最近在做Yii2.0 RESTful API功能,找了好久的资料,才找到这类的教程,感谢该作者,以下内容根据我的项目实际情况做了一定的修改。
安装yii2.0
安装 Composer 后,您可以通过在 Web 可访问的文件夹下运行以下命令来 安装Yii应用程序模板:
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
初始化高级模板
cd advanced
./init
输入”./init”后会出现以下内容
Yii Application Initialization Tool v1.0 Which environment do you want the application to be initialized in? [0] Development [1] Production Your choice [0-1, or “q” to quit] 0 Initialize the application under ‘Development’ environment? [yes|no] yes Start initialization …
修改数据库连接属性
打开 commonconfigmain-local.php,配置数据库连接信息
'db' = [
'class' = 'yiidbConnection',
'dsn' = 'mysql:host=127.0.0.1;dbname=yii',
'username' = 'root',
'password' = 'root',
'charset' = 'utf8',
],
执行 migrate 数据库迁移
./yii migrate
拷贝backend目录,命名为api
打开apiconfigmain.php 修改id,controllerNamespace等,将所有backend替换为api:
return [
'id' = 'app-api',
'basePath' = dirname(__DIR__),
'controllerNamespace' = 'apicontrollers',
]
打开apiconfigmain.php开启url路由美化规则
'urlManager' = [
'enablePrettyUrl' = true,
'showScriptName' = false,
'rules' = [
],
],
打开commonconfigbootstrap.php添加以下别名
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
为什么要单独创建API应用
单独创建API应用,目的是便于维护,可以避免以下问题
- 配置的冲突
- 控制器的命名不便
- url美化规则冲突
- 分工明确frontend为前台目录;backend为后台目录;api为api目录
接下来打开 apicontrollers 新建一个User控制器,继承 yiirestActiveController,命名为 UserController,代码如下:
<?php
namespace apicontrollers;
use yiirestActiveController;
class UserController extends ActiveController
{
public $modelClass = 'commonmodelsUser';
}
配置URL规则
为刚才的 user控制器添加url美化规则
打开 apiconfigmain.php 修改 components属性,添加下列代码:
...
'urlManager' = [
'enablePrettyUrl' = true,
'enableStrictParsing' = true,
'showScriptName' = false,
'rules' = [
['class' = 'yiirestUrlRule',
'controller' = 'user'
],
],
]
...
ok,到此就成了一个 符合 RESTful 风格的API
看起来在控制器了什么也没有写,只是指定了一个模型,但是她的背后完成了很多的功能哦,列表如下:
- GET /users: 逐页列出所有用户
- HEAD /users: 显示用户列表的概要信息
- POST /users: 创建一个新用户
- GET /users/123: 返回用户 123 的详细信息
- HEAD /users/123: 显示用户 123 的概述信息
- PATCH /users/123: and PUT /users/123: 更新用户123
- DELETE /users/123: 删除用户123
- OPTIONS /users: 显示关于末端 /users 支持的动词
- OPTIONS /users/123: 显示有关末端 /users/123 支持的动词
如何访问呢
你可以使用 curl命令进行访问,命令如下:
curl -i -H "Accept:application/json" http://localhost/users
命令行下还是比较麻烦的,也不方便测试,推荐使用 API测试工具
这类的工具有很多,我就不一一列举了,这里推荐 Postman,很好很强大,Chorme也有插件,可以安装,这里我推荐直接下载软件安装调试,比较方便
你可能发现了 访问任何路由地址都是加的s,users , 为什么呢? 资源,你要理解 资源二字,既然是资源肯定是个集合,肯定有一大堆,所以要加上复数,我是这么理解的。
你说我就是不想加上s,我就想采用http://localhost/user 这种方式来进行访问,好吧,可以,满足你,只是不推荐
继续打开配置文件apiconfigmain.php修改刚才添加的 urlManager 如下:
'urlManager' = [
'enablePrettyUrl' = true,
'enableStrictParsing' = true,
'showScriptName' = false,
'rules' = [
['class' = 'yiirestUrlRule',
'controller' = 'user',
'pluralize' = false, //设置为false 就可以去掉复数形式了
],
],
]
加入 ‘pluralize’ = false, 就表示去掉复数形式了,再次强调不推荐
ok,在控制器中我们没有写任何一句代码,他就给我们生成许多方法,但是有时候我们可能需要修改一些代码,来达到我们想要的效果,比如连表查询,然后再返回数据
接下来我们就实现这样的功能:
打开刚才新建的user控制器, 重写 action方法:
<?php
namespace apicontrollers;
use yiirestActiveController;
class UserController extend extends ActiveController
{
public $modelClass = 'commonmodelsUser';
public function actions()
{
$action= parent::actions(); // TODO: Change the autogenerated stub
unset($action['index']);
unset($action['create']);
unset($action['update']);
unset($action['delete']);
}
public function actionIndex()
{
//你的代码
}
}
这样我们就可以重写他的代码了。哈哈
我们再新建一个自己的 action
<?php
namespace apicontrollers;
use yiirestActiveController;
class UserController extends ActiveController
{
public $modelClass = 'commonmodelsUser';
public function actions()
{
$action= parent::actions(); // TODO: Change the autogenerated stub
unset($action['index']);
unset($action['create']);
unset($action['update']);
unset($action['delete']);
}
public function actionIndex()
{
//你的代码
}
public function actionTest() //假如是get请求
{
//业务逻辑
}
}
然后试着访问一下 http://localhost/users/test,报错?找不到?
报错就对了,那是因为我们没有设置其他路由访问
修改 apiconfigmain.php
'urlManager' = [
'enablePrettyUrl' = true,
'enableStrictParsing' = true,
'showScriptName' = false,
'rules' = [
['class' = 'yiirestUrlRule',
'controller' = 'user',
//'pluralize' = false, //设置为false 就可以去掉复数形式了
'extraPatterns'= [
'GET send-email'= 'test'
],
],
],
]
接下来重新访问就没有问题了,ps:你自己编写的任何 action 都要在 extraPatterns 进行配置
以上就是本文的全部内容,希望对大家的学习有所帮助。
- ASP.NET 2.0加密Web.config 配置文件
- .Net 跨平台可移植类库正在进行
- 掌握机器学习数学基础之概率统计(三)
- IBatisNet 之 自动生成主关键字
- IBatisNet之获取和操作SQL语句
- 大数据研究学者谈城市运行安全:要将应急处置转化为风险管理
- Castle.MVC框架介绍
- 在 .Net 设定 proxy 的方法
- MVC结构简介
- 优酷、爱奇艺、摩拜……多家网络平台被曝注册容易注销难!面临个人隐私泄露风险
- WordPress中借助.htaccess屏蔽某个IP或某个IP段(防垃圾评论)
- ASP.NET 调味品:AJAX
- CTreeCtrl 控件使用总结
- 高盛成立交易部门,涉足比特币和加密货币交易
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法