Wenxin Yiyan est une API de phrase chinoise gratuite fournie par Baidu, avec une limite de demande quotidienne de 1 000 fois. Néanmoins, il existe encore de nombreuses applications qui ont tendance à franchir cette limite lors d'appels à haute fréquence, déclenchant une limite ou être temporairement bloquée.
Un grand nombre de demandes fréquentes ou éclatées peuvent rendre le service indisponible et peut même affecter les autres utilisateurs sur la même plate-forme. Par conséquent, il peut raisonnablement limiter le nombre de demandes et de trafic pendant le développement peut assurer efficacement la disponibilité et la stabilité de l'API.
Dans PHP, nous pouvons enregistrer et juger la fréquence de demande d'un seul utilisateur via Redis pour limiter le nombre de demandes par jour. Voici un exemple de code typique:
// connecterRedisserveur
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// Obtenir des utilisateursIPet date actuelle
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");
// ConstruireRedisNom de clé
$key = $ip . '-' . $date;
$count = $redis->get($key);
if (!$count) {
// Première demande,Initialiser le nombre et définir le temps d'expiration
$redis->set($key, 1);
$redis->expire($key, 86400);
} else {
if ($count >= 1000) {
echo 'Le nombre de demandes dépassées';
exit;
}
// Augmenter le décompte
$redis->incr($key);
$redis->expire($key, 86400);
}
// Demandez à Wen Xin un motAPI
$url = 'https://v1.alapi.cn/api/shici?format=text';
$response = file_get_contents($url);
echo $response;
En plus de la limite actuelle de la couche d'application, Nginx peut également limiter le taux de demande au niveau de la couche de service pour éviter la pression causée par une concurrence à court terme. Les exemples sont les suivants:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}
server {
...
location / {
limit_req zone=one burst=5 nodelay;
proxy_pass ...;
}
}
La configuration ci-dessus est la suivante:
PHP combiné avec Redis pour la limitation du courant demandé et Nginx pour le contrôle du trafic est un moyen efficace d'assurer le fonctionnement stable de l'API. Cet article prend l'API Baidu Wenxin Yiyan comme exemple et fournit des suggestions de code d'implémentation et de configuration pratiques. Des pratiques similaires peuvent également être appliquées à d'autres interfaces ouvertes pour les appels à haute fréquence, et les développeurs devraient mettre en place des stratégies de limitation actuelles raisonnablement en fonction des besoins de l'entreprise.