环境配置:

开启服务器伪静态

本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码

LoadModule rewrite_module modules/mod_rewrite.so

将其前面的#去掉,如果没有找到则添加进去。

找到一下代码

AllowOverride All

Options NoneRequireall granted

将原本的AllowOverride None改为AllowOverride All。

然后在站点根目录下创建一个.htaccess文件,内容如下:

Options+FollowSymlinks

RewriteEngine On

RewriteCond%{REQUEST_FILENAME} !-d

RewriteCond%{REQUEST_FILENAME} !-f

RewriteRule. index.php

.htaccess

此处不再赘述yii2的配置,如果需要可以看

YII2实际操作:

1、配置URL规则及modules

(1)新建modules文件夹,实行api接口版本控制。例如V1版本、V2版本……

在v1文件夹下新建controllers文件夹(控制器)、models文件夹(模型)、Module.php配置文件。

Module.php文件如下:

1 <?php2 namespace api\modules\v1;3

4 class Module extends\yii\base\Module5 {6

7 public $controllerNamespace = 'api\modules\v1\controllers';8

9 public functioninit()10 {11 parent::init();12 }13 }

第2行和第7行随版本扩展而变化(v1->v2...)。

(2)配置config文件夹下的main.php文件

1 <?php2 $params = array_merge(require (__DIR__ . '/../../common/config/params.php'), require (__DIR__ . '/../../common/config/params-local.php'), require (__DIR__ . '/params.php'), require (__DIR__ . '/params-local.php'));3

4 return[5 'id' => 'app-api',

6 'basePath' => dirname(__DIR__),

7 'bootstrap' =>[8 'log'

9 ],

10 'modules' =>[11 'v1' =>[12 'class' => 'api\modules\v1\Module'

13 ],

14 'v2' =>[15 'class' => 'api\modules\v2\Module'

16 ]17 ],

18 'controllerNamespace' => 'api\controllers',

19 'components' =>[20 'user' =>[21 'identityClass' => 'common\models\User',

22 'enableAutoLogin' => false,

23 'enableSession' => false,

24 'loginUrl' => null

25 ],

26 'urlManager' =>[27 'enablePrettyUrl' => true, //启用美化URL

28 'enableStrictParsing' => true, //是否执行严格的url解析

29 'showScriptName' => false, //在URL路径中是否显示脚本入口文件

30 'rules' =>[31 [32 'class' => 'yii\rest\UrlRule',

33 'controller' =>[34 'v1/site'

35 ]36 ],

37 [38 'class' => 'yii\rest\UrlRule',

39 'controller' =>[40 'v2/site'

41 ]42 ]43 ]44 ],

45 'log' =>[46 'traceLevel' => YII_DEBUG ? 3 : 0,

47 'targets' =>[48 [49 'class' => 'yii\log\FileTarget',

50 'levels' =>[51 'error',

52 'warning'

53 ]54 ]55 ]56 ],

57 'errorHandler' =>[58 'errorAction' => 'site/error'

59 ]60 ],

61 'params' => $params

62 ];

main.php

注意10~17行、20~44行的组件配置,相信大家仔细阅读就能明白,此处不再赘述原理,请大家尤其注意33~35行的代码,此处表示的是v1/site控制器,随着接口控制器的增多,可以直接在数组中增加即可。本文力求快速配置出RESTful架构的实现。

(3)v2、v3表示以后的版本变化,配置都类似于v1文件夹。

2、创建一个模型

数据库准备一个名为mxq_guide的数据表

CREATE TABLE `mxq_guide` (

`id` int(11) NOT NULL AUTO_INCREMENT,`imgurl` varchar(255) DEFAULT NULLCOMMENT '图片路径',`status` int(11)DEFAULTNULLCOMMENT '1启用 0禁用',`flag` int(11)DEFAULTNULLCOMMENT '1安卓 2苹果',PRIMARYKEY(`id`)

) ENGINE=MyISAM AUTO_INCREMENT=24DEFAULTCHARSET=utf8 COMMENT='APP导航图';

创建后请注意及时往数据库添加几条数据信息。

通过脚手架gii来创建guide.php模型(使用方法请看

1 <?php2 namespace api\modules\v1\models;3

4 useYii;5 useyii\db\ActiveRecord;6 useyii\web\IdentityInterface;7

8 /**9 * This is the model class for table "{{%guide}}".10 *11 * @property integer $id12 * @property string $imgurl13 * @property integer $status14 * @property integer $flag15 */

16 class Guide extends ActiveRecord implementsIdentityInterface17 {18

19 public static function findIdentityByAccessToken($token, $type = null)20 {21 return static::findOne([22 'access_token' => $token

23 ]);24 }25

26 public functiongetId()27 {28 return $this->id;29 }30

31 public functiongetAuthKey()32 {33 return $this->authKey;34 }35

36 public function validateAuthKey($authKey)37 {38 return $this->authKey === $authKey;39 }40

41 public static function findIdentity($id)42 {43 return static::findOne($id);44 }45

46 public static functiontableName()47 {48 return '{{%guide}}';49 }50

51 public functionrules()52 {53 return[54 [55 [56 'imgurl',

57 'status',

58 'flag'

59 ],

60 'required'

61 ],

62 [63 [64 'status',

65 'flag'

66 ],

67 'integer'

68 ],

69 [70 [71 'imgurl'

72 ],

73 'string',

74 'max' => 255

75 ]76 ];77 }78

79 public functionattributeLabels()80 {81 return[82 'id' => Yii::t('app', 'ID'),

83 'imgurl' => Yii::t('app', 'imgurl'),

84 'status' => Yii::t('app', 'status'),

85 'flag' => Yii::t('app', 'flag')86 ];87 }88 }

guide.php

3、创建一个控制器

1 <?php2 namespace api\modules\v1\controllers;3

4 useYii;5 useyii\rest\ActiveController;6 useyii\filters\auth\CompositeAuth;7 useyii\filters\auth\QueryParamAuth;8 useyii\data\ActiveDataProvider;9

10 class SiteController extendsActiveController11 {12

13 public $modelClass = 'api\modules\v1\models\guide';14

15 public $serializer =[16 'class' => 'yii\rest\Serializer',

17 'collectionEnvelope' => 'items'

18 ];19

20 //public function behaviors()21 // {22 // $behaviors = parent::behaviors();23 // $behaviors['authenticator'] = [24 // 'class' => CompositeAuth::className(),25 // 'authMethods' => [26 // QueryParamAuth::className()27 // ]28 // ];29 // return $behaviors;30 // }

31 public functionactions()32 {33 $actions = parent::actions();34 //注销系统自带的实现方法

35 unset($actions['index'], $actions['update'], $actions['create'], $actions['delete'], $actions['view']);36 return $actions;37 }38

39 public functionactionIndex()40 {41 $modelClass = $this->modelClass;42 $query = $modelClass::find();43 return newActiveDataProvider([44 'query' => $query

45 ]);46 }47

48 public functionactionCreate()49 {50 $model = new $this->modelClass();51 //$model->load(Yii::$app->getRequest()52 // ->getBodyParams(), '');

53 $model->attributes = Yii::$app->request->post();54 if (! $model->save()) {55 return array_values($model->getFirstErrors())[0];56 }57 return $model;58 }59

60 public function actionUpdate($id)61 {62 $model = $this->findModel($id);63 $model->attributes = Yii::$app->request->post();64 if (! $model->save()) {65 return array_values($model->getFirstErrors())[0];66 }67 return $model;68 }69

70 public function actionDelete($id)71 {72 return $this->findModel($id)->delete();73 }74

75 public function actionView($id)76 {77 return $this->findModel($id);78 }79

80 protected function findModel($id)81 {82 $modelClass = $this->modelClass;83 if (($model = $modelClass::findOne($id)) !== null) {84 return $model;85 } else{86 throw new NotFoundHttpException('The requested page does not exist.');87 }88 }89

90 public function checkAccess($action, $model = null, $params =[])91 {92 //检查用户能否访问 $action 和 $model93 // 访问被拒绝应抛出ForbiddenHttpException94 // var_dump($params);exit;

95 }96 }

SiteController.php

控制器请创建在modules/controllers文件夹下,并注意命名空间的修改。

要注意的是,此处的控制器与普通的控制器继承Controller不同,此处需继承ActiveController类。

20~30行注释的代码是基于RESTful架构的access_token认证,目前还未测试通过,后续补充。

至此,基于YII2的所有配置已基本完成,接下来介绍api接口测试工具及方法。

RESTful的测试工具PostMAN:

首先介绍一下postman这款插件,是基于谷歌浏览器的一款模拟请求的实用插件。具体使用,在下面测试过程中涉及截图,介绍不足之处请见谅,自己也是第一次使用。

推荐使用上面的APP版本,便于后续封装自己写好的api接口,下面的是网页版本。

YII2支持的RESTful有四种请求方式:GET查看信息,POST创建信息,PUT更新信息,DELETE删除信息。

下面开始演示四种请求数据的方式。(只是截图演示效果,具体使用还需要大家自己去摸索。)

此处演示的是GET方法请求数据库的数据。对应的是modules/controllers/SiteController/actionIndex方法。

请大家注意最上面方框内的URL地址,rest默认将控制器进行复数请求http://api.mxq.com/v1/sites,此处就是rest的默认规则。

打*星号位置显示的是正常的效果,如若出现错误,大家可以去

YII2的ActiveController默认实现了数据的分页效果。

此处演示的是POST方法新建数据库的数据。对应的是modules/controllers/SiteController/actionCreate方法。

如果在数据库的数据层写好数据校验规则,此处提交数据不满足要求的时候就会显示相应的错误。这也是REST的优势之一。比如如下情况,flag我定义的是int型:

接下来演示的是PUT方法更新数据库的数据。对应的是modules/controllers/SiteController/actionUpdate方法。

此处请大家再次注意最上面的URL:http://api.mxq.com/v1/sites/15  此处15代表的是数据库id为15的数据,表示更新数据库ID为15的数据信息。请大家一定注意。RESTful在使用更新和删除数据操作的时候,id不能一表单的形式提交,必须紧跟在URL之后。

接下来演示的是DELETE方法删除数据库的数据。对应的是modules/controllers/SiteController/actionDelete方法。

当返回值为1的时候表示的就是删除操作执行成功。具体原理请大家仔细观察sitecontroller控制器内的函数。

以上就是基于yii2的RESTful的一些简单介绍、实现方法以及测试结果。有什么不正确或遗漏的地方,欢迎大家来补充。后续也会在此基础上进行更新。本人第一次接触yii2框架和RESTful架构,表述如有不对之处,请大家见谅。

yii2 提供接口给java_Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)...相关推荐

  1. 计算机组成原理mips描述,计算机组成原理与接口技术:基于MIPS架构/华中科技大学教学改革建设教材...

    <计算机组成原理与接口技术:基于MIPS架构/华中科技大学教学改革建设教材>以MIPS微处理器为背景,全面阐述了计算机组成原理与接口技术.首先简要阐述了计算机系统的基本构成.结构模型.工作 ...

  2. 基于SSH架构的在线拍卖系统设计与开发

    摘 要 拍卖是购买和销售中的一种重要的交易方式,随着Internet的日益普及和电子商务的发展,网上拍卖这种电子商务模式将成为主流的一种交易方式.各色各样的电子商务网站层出不穷,其中又以易趣,淘宝类的 ...

  3. python3.7魔塔游戏_基于Funcode平台的“火锅版魔塔”游戏开发与设计

    2019 年第 2 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Funcode 平台的"火锅版魔塔"游戏开发与设计 ...

  4. 京东商品详情APP原数据API接口-(item_get_app-获得JD商品详情原数据API接口),京东API接口

    一.京东商品详情APP原数据API接口-(item_get_app-获得JD商品详情原数据API接口),京东API接口代码如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用k ...

  5. “安居客“住房系统-基于Python-Django前后端分离开发(二)——基于RESTful架构的数据接口配置以及Redis高速缓存

    "安居客"住房系统-基于Python-Django前后端分离开发(二) 基于Django-Rest-Framework创建接口数据(二) 文章目录 "安居客"住 ...

  6. 计算机组成原理+左冬红,计算机组成原理与接口技术--基于MIPS架构(第2版高等学校电子信息类专业系列教材)...

    导语 内容提要 华中科技大学电子信息与通信学院基于FPGA平台的"微机原理与接口技术"课程教学改革已进行数载,作者在总结教学经验基础上,对<计算机组成原理与接口技术>进 ...

  7. php怎么根据接口文档实现功能,CodeIgniter+swagger实现 PHP API接口文档自动生成功能...

    一.安装swagger 1.首先需要有composer,没有的自行百度安装 2.下载swagger,打开网站https://packagist.org/packages/zircote/swagger ...

  8. 运营商二要素-运营商二要素认证-运营商二要素实名认证-运营商二要素认证接口-运营商二要素api-运营商二要素api接口

    运营商二要素接口描述 接口名称 运营商二要素验证_姓名 接口编号 JR-HYT-004 接口描述 运营商二要素验证_姓名 接口地址 /dmp/api 请求方式 POST 加密方式 RSA2 加密方式 ...

  9. 请求接口返回的是一个html_搜狗美图 API 接口请求调用

    搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图,本 API 接口可选择生成当日美图,也 ...

最新文章

  1. java paint方法哪个周期调用_关于一段java程序的小问题,paint函数是什么时候执行的,没有调用啊...
  2. FindFirstFile FindNextFile 以及_WIN32_FIND_DATA结构
  3. 详解语义分割评价指标
  4. HDU1007 Quoit Design 分治+递归
  5. 07_设置坐标轴刻度、设置刻度标签(Setting Tick Labels)、调整刻度标签 (Adjusting the ticklabels)
  6. sql 查询数据库索引重建_不良的数据库索引– SQL查询性能的杀手–建议
  7. java中int与byte相互转换
  8. SQL Server LEFT函数
  9. Java TCP网络编程
  10. dfs和bfs走迷宫
  11. Windows 7安装loopback接口
  12. moses binarize-all问题
  13. XR迈向10亿级必须解决的3个问题
  14. 利用平台系统运营店铺五大法则
  15. 数字电路2. OC门、OD门、三态门
  16. qbo energy board debug
  17. 巧妙使用多个旧路由器无线中继提升网络速度
  18. 世界经济论坛公布全球首个量子计算标准指南
  19. iOS 连接外设的几种方式
  20. MNIST手写数字识别 —— ResNet-经典卷积神经网络

热门文章

  1. Reapter 中客户端控件和服务器端控件的选择
  2. CentOS 8源码安装Zabbix5.0
  3. Eclipse中的Git使用之Branch创建,Merge
  4. Java中,native2ascii.exe 的使用(最简单说明)
  5. pycharm中不能安装bs4的解决方案
  6. react+spring 记录跨域问题的解决方法
  7. MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题
  8. nginx部署vue前端,刷新出现404或者500错误的解决方案
  9. XCode - 无法对iPhone真机调试的解决方法!
  10. “fatal error C1010”错误解决的三种方法