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
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!