创立API利用入口:
1,复制 backend ⾄ api, environments/dev/backend ⾄ environments/dev/
api 以及 environments/prod/backend ⾄ environments/prod/api.
2,批改配置⽂件main.php,须要批改应⽤id、命名空间、⽤户组件和url丑化
的配置内容
'id' => 'app-api','controllerNamespace' => 'api\controllers',
3,在 commonconfigbootstrap.php 中增加api的门路别名
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
独自创立api入口的益处:
独自创立API应⽤,⽬的是便于保护。能够防止这些问题:
• 配置的抵触
• 控制器的命名不便
• url丑化规定抵触
创立第⼀个API应⽤:
1,创立了vod-detail控制器:
VodDetailController.php
<?phpnamespace api\controllers;use Yii;use common\models\VodDetail;use common\models\VodDetailSearch;use yii\rest\ActiveController;use yii\web\Controller;use yii\web\NotFoundHttpException;use yii\filters\VerbFilter;/** * VodDetailController implements the CRUD actions for VodDetail model. */class VodDetailController extends ActiveController{ public $modelClass = 'common\models\VodDetail';}
2,在配置⽂件中,创立了针对vod-detail管制
器的url丑化规定:
main.php:
'urlManager' => [ 'enablePrettyUrl' => true, //严格解析 至多要合乎rules中的一条,否则抛出异样 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => 'vod-detail', ], ], ],
3,配置main-local⽂件,让API应⽤能接管
JSON 格局的输⼊数据:
main-local.php:
'parsers' => [ 'application/json' => 'yii\web\JsonParser', ]
应用postman调试:
能够看出通过简略的代码编写和配置,齐全能够拜访输入合乎restful格调的Api接口了。
但,还是有些问题要解决。比方:vod_create_time和vod_update_time字段是工夫戳,咱们须要转换,另外,并没有输入播放地址列表.
工夫戳咱们不转换,调用时能够在客户端转换,接下来咱们实现自定义播放地址字段。
字段的⾃定义设置 :
能够重写模型类的 fields() 或extraFields()
⽅法,依据需要设置字段以及字段的值,这样,Serializer转换出 来的数组就是咱们须要的数据了。1,在客户端发送的api申请地址上,通过fields参数来指定须要的字段 ,
2,咱们重写fields⽅法来指定须要的字段,还能够⾃定义字段名。
,3,在fields⽅法中,通过匿名函数⾃定义字段的值。 ,
4,通过重写extrafields这个⽅法来⾃定义字段 ,
5,能够⽤unset来屏蔽字段
咱们通过重写extrafields这个⽅法来⾃定义字段 ,实现播放地址。
1,在VodDetail模型类中减少getPlayurls办法,重写extrafields办法:
/*** * @return \yii\db\ActiveQuery * 获取视频对应的播放地址 */ public function getPlayurls() { return $this->hasMany(PlayUrl::className(), ['url_id' => 'url_id']);// $playurls = $this->hasMany(PlayUrl::className(), ['url_id' => 'url_id']);// return ArrayHelper::index($playurls, null, 'play_from'); } /** * 重写extraFields 增加关联字段 * @return array|false */ public function extraFields() { return ['playurls']; }
2,配置Url丑化规定默认显示自定义的extraFields字段'playurls':
'ruleConfig' => [ 'class' => 'yii\web\UrlRule', 'defaults' => [ 'expand' => 'playurls', ], ],
再次通过postman模仿申请api能够看到播放地址曾经显示了:
在控制器中实现相似WEB网站中列表页的按任何字段搜寻和排序功能:
VodDetailController.php
先开释掉默认的index办法:
public function actions() { $actions = parent::actions(); unset($actions['index']); return $actions; }
再重写index办法:
public function actionIndex() { $params = Yii::$app->getRequest()->queryParams; $searchModel = new VodDetailSearch(); return $searchModel->search($params); }
这里就实现了实践上能够依照vod_detail表中的任何字段搜寻过滤和排序。
比方按分类过滤:
按题目搜寻:
按id程序、倒序排序:
甚至反对多个字段联结搜寻过滤。。。。
最初,因为api控制器默认实现了增删改查及index办法,咱们只须要index办法和查,为了平安咱们在url丑化中禁用增、删、改。
'except' => ['delete', 'create', 'update'],//设置被禁用的http动词
很少的代码量并搭配简略的配置,就实现了和web网站一样性能的 合乎restful格调的Api。
欢送各位大佬入裙交换(879782113):