api访问频率限制
1.修改需要限制频率的用户model类,使其继承RateLimitInterface接口,
use yii\filters\RateLimitInterface;
2.实现该接口需要实现的3个方法
//频率限制
public function getRateLimit($request,$action){
return [2,1];//每秒请求2 times
}
public function loadAllowance($request,$action){
return [$this->allowance,$this->allowance_updated_at];
}
public function saveAllowance($request,$action,$allowance,$timestamp){
$this->allowance = $allowance;
$this->allowance_updated_at = $timestamp;
$this->save();
}
3.修改控制器的behaviors(好像不加这一步也可以实现频率限制)
//频率限制
$behaviors['rateLimiter']=[
'class'=>RateLimiter::className(),
'enableRateLimitHeaders'=>true,
];
版本控制
1.利用yii2系统自带的gii工具生成module,系统的目录结构参考api/modules/v2/controllers/
2.修改config/main.php文件,添加module,添加route
'modules' => [
'v2' => [
'class' => 'api\modules\v2\Module',
],
],
...
[
'class' => 'yii\rest\UrlRule',
'controller' => ['v2/test'], //版本2,test为控制器名称
'pluralize'=>false,//url不带复数
]
返回数据格式化
1.可以在config/main.php里面定义response
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
$response-> format = yii\web\Response::FORMAT_JSON; //定义所有控制器的返回数据格式
},
]
2.也可以在单个控制器里面设定该控制器的返回格式化的数据
ps:格式响应:定义当前控制器的返回数据格式:(如果main.php和里面的behaviors同时定义了,则以里面定义为主)
// $behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_HTML;//Response::FORMAT_XML;Response::FORMAT_JSON;
返回数据自定义错误数据格式
修改config/main.php,在beforeSend里添加如下代码:
$response-> format = yii\web\Response::FORMAT_JSON;//自定义返回的数据类型必须和这里的定义一致,不然会报错
$response->statusCode = 200;//自定义返回错误码,方便前端统一用json格式处理数据
$obj =
[
'success'=>$response->isSuccessful,
'code'=>$response->getStatusCode(),
'data'=>$response->data,
'message'=>$response->statusText
];
$response-> data = $obj;