Wenxin Yiyanは、Baiduが提供する無料の中国の文APIであり、1,000回のリクエスト制限があります。それにもかかわらず、高周波の呼び出し中にこの制限を突破する傾向がある多くのアプリケーションがまだあります。
頻繁にまたは多数のリクエストを破裂させると、サービスが利用できなくなり、同じプラットフォーム上の他のユーザーに影響を与える可能性があります。したがって、開発中の要求とトラフィックの数を合理的に制限すると、APIの可用性と安定性が効果的に保証されます。
PHPでは、1日あたりのリクエスト数を制限するために、Redisを介して単一のユーザーの要求頻度を記録および判断できます。典型的なコードの例は次のとおりです。
// 接続するRedisサーバ
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// ユーザーを取得しますIPそして現在の日付
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");
// 建てるRedisキー名
$key = $ip . '-' . $date;
$count = $redis->get($key);
if (!$count) {
// 最初のリクエスト,カウントを初期化し、有効期限を設定します
$redis->set($key, 1);
$redis->expire($key, 86400);
} else {
if ($count >= 1000) {
echo 'リクエストの数を超えました';
exit;
}
// カウントを増やします
$redis->incr($key);
$redis->expire($key, 86400);
}
// Wen Xinに一言も尋ねてくださいAPI
$url = 'https://v1.alapi.cn/api/shici?format=text';
$response = file_get_contents($url);
echo $response;
アプリケーションレイヤーの電流制限に加えて、Nginxは、短期的な高い並行性によって引き起こされる圧力を回避するために、サービスレイヤーの要求レートを制限することもできます。例は次のとおりです。
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}
server {
...
location / {
limit_req zone=one burst=5 nodelay;
proxy_pass ...;
}
}
上記の構成は次のとおりです。
要求された電流制限のためにRedisと組み合わせたPHPとトラフィックコントロールのNginxは、APIの安定した動作を確保するための効果的な方法です。この記事では、Baidu Wenxin Yiyan APIを例として取り上げ、実用的な実装コードと構成の提案を提供します。同様のプラクティスも、高周波コールのために他のオープンインターフェイスに適用することができ、開発者はビジネスニーズに応じて現在の制限戦略を合理的に設定する必要があります。