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

不言
Libérer: 2023-04-04 17:42:01
avant
2470 Les gens l'ont consulté

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
Copier après la connexion

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');
}
Copier après la connexion

Exécuter la migration

php yii migrate
Copier après la connexion

É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
{
    .
    .
    .
}
Copier après la connexion

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();
}
Copier après la connexion

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;
}
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal