Maison >développement back-end >tutoriel php >Quelles sont les limites de vitesse de l'API RESTful Yii2.0 ? A quoi ça sert ?

Quelles sont les limites de vitesse de l'API RESTful Yii2.0 ? A quoi ça sert ?

不言
不言avant
2019-01-10 11:20:592500parcourir

Le contenu de cet article concerne la limite de vitesse de l'API RESTful Yii2.0 ? A quoi ça sert ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Qu'est-ce que la limitation de débit ?

Le guide faisant autorité se traduit par limitation. Pour éviter les abus, vous devriez envisager de limiter votre API. Par exemple, vous pouvez limiter chaque utilisateur à 100 appels vers l'API dans un délai de 10 minutes. Si un grand nombre de demandes sont reçues d'un utilisateur dans un délai spécifié, le code d'état de réponse 429 sera renvoyé (ce qui signifie trop de demandes).

Pour activer la limitation de débit, vous devez d'abord implémenter la classe d'authentification. J'ai développé le chapitre sur l'authentification dans le didacticiel d'authentification de l'API RESTful Yii2.0. Je ne le présenterai pas dans cet article. basé sur cela à nouveau

Activer la limitation de débit

En parcourant le guide faisant autorité, nous pouvons voir que pour activer la limitation de débit, la classe d'authentification doit d'abord hériter de yiifiltersRateLimitInterface

Générer deux champs clés

php yii migrate/create add_allowance_and_allowance_updated_at_to_user

Modifier le fichier de migration tout à l'heure

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

Exécuter la migration

php yii migrate

Écrire une classe d'authentification et en hériter de 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
{
    .
    .
    .
}

implémentationRateLimitInterface La méthode requise

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

est appelée dans le contrôleur

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 et demande votre action si 429 apparaît dans plusieurs requêtes. , cela signifie que la limite de débit est activée avec succès

Ce qui précède concerne l'utilisation de la limite de débit Yii2.0. La limite de débit doit être utilisée conjointement avec l'authentification, consultez Yii2.0 RESTful. Tutoriel d'authentification API. Cet article vous recommande de lire d'abord l'authentification. Après avoir terminé la fonction d'authentification, puis activez la limite de débit

Je pense que c'est la fin de l'API RESTFul de Yii2.0. . Le reste est du combat réel spécifique Entraînez-vous davantage, frappez davantage ,


.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer