Yii2.0 RESTful API 基础配置教程详解
最近在做Yii2.0RESTfulAPI功能,找了好久的资料,才找到这类的教程,感谢该作者,以下内容根据我的项目实际情况做了一定的修改。
安装yii2.0
安装Composer后,您可以通过在Web可访问的文件夹下运行以下命令来安装Yii应用程序模板:
composercreate-project--prefer-distyiisoft/yii2-app-basicbasic
初始化高级模板
cdadvanced ./init
输入"./init"后会出现以下内容
YiiApplicationInitializationToolv1.0
Whichenvironmentdoyouwanttheapplicationtobeinitializedin?
[0]Development
[1]ProductionYourchoice[0-1,or"q"toquit]0
Initializetheapplicationunder'Development'environment?[yes|no]yes
Startinitialization...
修改数据库连接属性
打开commonconfigmain-local.php,配置数据库连接信息
'db'=>[ 'class'=>'yii\db\Connection', 'dsn'=>'mysql:host=127.0.0.1;dbname=yii', 'username'=>'root', 'password'=>'root', 'charset'=>'utf8', ],
执行migrate数据库迁移
./yiimigrate
拷贝backend目录,命名为api
打开apiconfigmain.php修改id,controllerNamespace等,将所有backend替换为api:
return[ 'id'=>'app-api', 'basePath'=>dirname(__DIR__), 'controllerNamespace'=>'api\controllers', ]
打开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,代码如下:
配置URL规则
为刚才的user控制器添加url美化规则
打开apiconfigmain.php修改components属性,添加下列代码:
... 'urlManager'=>[ 'enablePrettyUrl'=>true, 'enableStrictParsing'=>true, 'showScriptName'=>false, 'rules'=>[ ['class'=>'yii\rest\UrlRule', 'controller'=>'user' ], ], ] ...ok,到此就成了一个符合RESTful风格的API
看起来在控制器了什么也没有写,只是指定了一个模型,但是她的背后完成了很多的功能哦,列表如下:
- GET/users:逐页列出所有用户
- HEAD/users:显示用户列表的概要信息
- POST/users:创建一个新用户
- GET/users/123:返回用户123的详细信息
- HEAD/users/123:显示用户123的概述信息
- PATCH/users/123:andPUT/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'=>'yii\rest\UrlRule', 'controller'=>'user', 'pluralize'=>false,//设置为false就可以去掉复数形式了 ], ], ]
加入'pluralize'=>false,就表示去掉复数形式了,再次强调不推荐
ok,在控制器中我们没有写任何一句代码,他就给我们生成许多方法,但是有时候我们可能需要修改一些代码,来达到我们想要的效果,比如连表查询,然后再返回数据
接下来我们就实现这样的功能:
打开刚才新建的user控制器,重写action方法:
这样我们就可以重写他的代码了。哈哈
我们再新建一个自己的action
然后试着访问一下http://localhost/users/test,报错?找不到?
报错就对了,那是因为我们没有设置其他路由访问
修改apiconfigmain.php
'urlManager'=>[ 'enablePrettyUrl'=>true, 'enableStrictParsing'=>true, 'showScriptName'=>false, 'rules'=>[ ['class'=>'yii\rest\UrlRule', 'controller'=>'user', //'pluralize'=>false,//设置为false就可以去掉复数形式了 'extraPatterns'=>[ 'GETsend-email'=>'test' ], ], ], ]接下来重新访问就没有问题了,ps:你自己编写的任何action都要在extraPatterns进行配置
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。