RESTful Api
目录
- 继承的基类说明
- 速率和参数配置
- 不需要速率控制设置
- 不进行格式化返回
- 签名验证
- Url权限配置
- 方法权限验证
- 返回数据格式修改
- 自定义code返回
- 解析Model首个报错信息
- 获取当前登录的用户信息
注意:添加好控制器后必须配置rule才能正常访问,具体查看api/config/main.php
的路由规则示例
继承的基类说明
- 控制器请全部继承
api\controllers\OnAuthController
,注意Curd是改过的,不想用系统的Curd可直接继承api\controllers\ActiveController
,如果设置控制器内方法不需要验证请设置optional
属性 - 用户私有控制器请全部继承
api\controllers\UserAuthController
速率和参数配置
可自行修改
common\models\common\RateLimit
配置
不需要速率控制设置
找到 common\models\api\AccessToken
让其直接继承 common\models\base\BaseModel
即可
不进行格式化返回
只需要在返回之前加上这行代码就可以不进行格式化返回
Yii::$app->params['triggerBeforeSend'] = true
签名验证
可自行修改
api/config/params.php
配置
测试控制器:api\controllers\SignSecretKeyController
,注意要先开启路由规则匹配才能访问
return [
// 签名验证默认不关闭验证,如果开启需了解签名生成及验证
'user.httpSignValidity' => false,
// 签名授权公钥秘钥
'user.httpSignAccount' => [
'doormen' => 'e3de3825cfbf',
],
];
Url权限配置
系统默认都是严格校验url方式注意在
api/config/main.php的urlManager
里添加规则,否则访问都是404。
如果不想严格校验请在 urlManager 里面注释或删除'enableStrictParsing' => true,
方法权限验证
在执行访问方法前系统会先调用
checkAccess
方法来检测该方法能不能被验证通过,可以在控制器内添加该方法来判断权限,如果不需要可忽略。下面是个例子,不想让外部访问 delete 和 index 方法
/**
* 权限验证
*
* @param string $action 当前的方法
* @param null $model 当前的模型类
* @param array $params $_GET变量
* @throws \yii\web\BadRequestHttpException
*/
public function checkAccess($action, $model = null, $params = [])
{
// 方法名称
if (in_array($action, ['delete', 'index'])) {
throw new \yii\web\BadRequestHttpException('权限不足');
}
}
返回数据格式修改
请自行修改
api\behaviors\BeforeSend
行为
注意: 有些前端没有接触过状态码在Http头里面返回所以可以 在 BeforeSend 数据处理后开启$response->statusCode = 200
;
自定义code返回
/**
* 返回json数据格式
*
* 注意:要符合http状态码 否则报错
*
* @param int $code 状态码
* @param string $message 返回的报错信息
* @param array|object $data 返回的数据结构
*/
common\helpers\ResultHelper::json($code, $message, $data = []);
解析Model首个报错信息
/**
* 注意这里传递的变量一定是 `$model->getFirstErrors()` 的数据
*
* @param $fistErrors
* @return string
*/
$this->analyErr($model->getFirstErrors())
获取当前登录的用户信息
use addons\Member\common\models\Member;
$tokenModel = Yii::$app->user->identity;
$member = Yii::$app->services->member->get($tokenModel['member_id']);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。