• 技术文章 >后端开发 >php教程

    Yii2.0 RESTful API的速度限制是什么?有什么用?

    不言不言2019-01-10 11:20:59转载1239
    本篇文章给大家带来的内容是关于Yii2.0 RESTful API的速度限制是什么?有什么用?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    什么是速率限制?

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

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

    启用速率限制

    翻阅权威指南,我们可以看到要启用速率限制首先 认证类 需要继承 yiifiltersRateLimitInterface

    生成两个关键字段

    php yii migrate/create add_allowance_and_allowance_updated_at_to_user

    修改 刚才的迁移文件

    /**
     * {@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');
    }

    执行迁移

    php yii migrate

    编写认证类,并继承 RateLimitInterface

    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 所需要的方法

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

    控制器中实现调用

    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,那么表示速率限制启用成功

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

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

    以上就是Yii2.0 RESTful API的速度限制是什么?有什么用?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:rest-api api restful yii2 php
    上一篇:MVC架构的职责划分原则 下一篇:Yii2.0 RESTful API的版本控制的介绍(代码示例)
    大前端线上培训班

    相关文章推荐

    • yii2.0实现pathinfo的形式访问的配置方法_PHP• yii2.0配置以pathinfo的形式访问,yii2.0pathinfo• yii2.0使用Plupload实现带缩放功能的多图上传,• Yii2.0中文开发向导Where条件查询全解析,• yii2.0之GridView自定义按钮和链接用法,yii2.0gridview• 在Yii2.0中实现计划任务(cron)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网