私はWebサービスAPIとインターフェイスするPythonライブラリに取り組んでいます。私が遭遇した多くのWebサービスと同様に、これは要求のレートを制限するように要求します。limit
クラスのインスタンス化にオプションのパラメーター、を提供したいと思います。これが提供された場合、指定された秒数が経過するまで送信要求を保持します。
一般的なシナリオは次のとおりです。クラスのインスタンスがメソッドを介してリクエストを行います。その場合、メソッドはどこかにロック変数を設定する信号を発し、秒数のカウントダウンタイマーを開始しlimit
ます。(おそらく、ロックはカウントダウンタイマー自体です。)この時間枠内に別の要求が行われた場合、カウントダウンタイマーがゼロになり、ロックが解除されるまで、その要求をキューに入れる必要があります。この時点で、キュー上の最も古い要求が送信され、カウントダウンタイマーがリセットされ、ロックが再度適用されます。
これは糸脱毛の場合ですか?私が見ていない別のアプローチはありますか?
カウントダウンタイマーとロックはインスタンス変数である必要がありますか、それともクラスのすべてのインスタンスがリクエストを保持するように、それらはクラスに属している必要がありますか?
また、これはライブラリ内でレート制限機能を提供するための一般的に悪い考えですか?デフォルトではカウントダウンは0秒であるため、ライブラリを使用すると、開発者はライブラリを使用して独自のレート制限スキームを提供できます。このサービスを使用する開発者はとにかくリクエストをレート制限する必要があることを考えると、ライブラリがレート制限の手段を提供するのは便利だと思います。
ライブラリに律速スキームを配置するかどうかに関係なく、ライブラリを使用してアプリケーションを作成したいので、提案された手法が役立ちます。