Yii2.0 RESTful API 之速率限制

Yii2.0 RESTful API 之速率限制

什么是速率限制?

权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流。 例如,您能够限制每一个用户 10 分钟内最多调用 API 100 次。 若是在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。php

要启用速率限制,首先须要实现认证类,而关于认证的章节我在 Yii2.0 RESTful API 认证教程 进行了详细的阐述,本篇就不过多介绍,再次基础上进行操做

启用速率限制

翻阅权威指南,咱们能够看到要启用速率限制首先 认证类 须要继承 yiifiltersRateLimitInterfacelaravel

生成两个关键字段web

php yii migrate/create add_allowance_and_allowance_updated_at_to_user

修改 刚才的迁移文件api

/**
 * {@inheritdoc}
 */
public function safeUp()
{
    $this->addColumn('user', 'allowance', $this->integer());
    $this->addColumn('user', 'allowance_updated_at', $this->integer());
}

/**
 * {@inheritdoc}
 */
public function safeDown()
{
    $this->dropColumn('user', 'allowance');
    $this->dropColumn('user', 'allowance_updated_at');
}

执行迁移restful

php yii migrate

编写认证类,并继承 RateLimitInterfaceyii2

namespace api\models;

use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\filters\RateLimitInterface;
use yii\web\IdentityInterface;

class User extends ActiveRecord implements IdentityInterface,RateLimitInterface
{
    .
    .
    .
}

实现 RateLimitInterface 所须要的方法yii

public function getRateLimit($request, $action)
{
    return [1, 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();
}

控制器中实现调用post

use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;
use yii\filters\RateLimiter;

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['rateLimiter'] = [
        'class' => RateLimiter::className(),
        'enableRateLimitHeaders' => true,
    ];
    $behaviors['authenticator'] = [
        'class' => CompositeAuth::className(),
        'authMethods' => [
            //Http::className(),
            HttpBearerAuth::className(),
            QueryParamAuth::className(),
        ],
    ];
    //$behaviors['rateLimiter']['enableRateLimitHeaders'] = true;
    return $behaviors;
}

ok,请求下你的 action,屡次请求若是出现 429,那么表示速率限制启用成功this

以上就是关于 Yii2.0 速率限制的使用,速率限制须要和认证配合着使用,关于认证的,查阅Yii2.0 RESTful API 认证教程 ,这篇文章,推荐您,先看完认证,先作完认证的功能,而后在启用速率限制 spa

关于 Yii2.0 RESTFul API到此我以为就结束了,核心功能就是这些,剩下的就是具体的实战了,多练、多敲,

一共四篇文章,分别为:

Yii2.0 RESTful API 基础配置教程

Yii2.0 RESTful API 认证教程

Yii2.0 RESTful API 之版本控制

Yii2.0 RESTful API 之速率限制

相关文章
相关标签/搜索