Yii2限速API

穆罕默德·沙扎德(Muhammad Shahzad)

我担心Yii2限速API?

什么是速率限制API,为什么要使用它?

这是Yii2的一些方法。yii专家可以用简单的词来解释这些方法吗,我应该在何时何地在api中使用速率限制?

public function getRateLimit($request, $action)
{
    return [$this->rateLimit, 1]; // $rateLimit requests per second
}

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();
} 
乔瓦兹

方法

getRateLimit()loadAllowance()以及Inteface中saveAllowance()包含的三种方法\yii\filters\RateLimitInterface,用户身份类应实现此三种方法来限制api的速率。

getRateLimit()是第一个方法,它返回您可以在x秒内完成的api调用的最大数目:

public function getRateLimit($request, $action) {
    return [1,20]; // There can be 1 api call every 20 seconds
}

loadAllowance()返回剩余的允许请求数以及最近一次检查这些请求的相应UNIX时间戳。

public function loadAllowance($request, $action)
{
    return [$this->allowance, $this->allowance_updated_at]; 
}

saveAllowance()为$ this-> allowance分配剩余允许请求的值,并将时间戳保存在$ this-> allowance_updated_at中。

public function saveAllowance($request, $action, $allowance, $timestamp)
{
    $this->allowance = $allowance; //Saving Remaining Requests
    $this->allowance_updated_at = $timestamp; // Saving Timestamp
    $this->save(); //Save the model
} 

执行

这是在示例应用程序中(使用高级模板)实施速率限制的方法:

1设置用户身份等级

config/main.phpapi应用程序的中,设置user组件。

'user' => [
        'identityClass' => 'api\models\User', // User Model for your api
        'enableSession' => false, 
        'loginUrl' => null,        
    ],

2创建用户模型

该模型应实现\yii\filters\RateLimitInterface

这是我的:

class User extends \common\models\User implements \yii\filters\RateLimitInterface
{

    public $rateLimit = 1;
    public $allowance;
    public $allowance_updated_at;

    public function getRateLimit($request, $action) {
        return [$this->rateLimit,1];
    }

    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();
    }

}

经过这两个步骤后,Yii将自动使用yii\filters\RateLimiter配置为操作过滤器yii\rest\Controller来执行速率限制检查(如文档中所述)。

您要做的最后一件事是在剩余控制器行为中禁用“速率限制”标头:

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['rateLimiter']['enableRateLimitHeaders'] = false;
    return $behaviors;
}

当您应该在应用程序中使用速率限制时

Api调用从数据库中返回数据(带有过滤器),因此当它们被调用时,服务器将执行查询。调用越多,执行的查询数也就越多,

您必须限制呼叫的数量,以防止服务器繁重的工作以及由此导致的系统故障。

希望这会有所帮助。我离《 Yii2指南》不远,但是我认为我无法以一种简单的方式对此进行解释。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章