0

私は現在、Symfony2を使用してRESTAPIを作成しています。私は1ヶ月前にSymfony2を使い始めましたが、現在技術的な問題に直面しています。

APIを作成している間、API呼び出しをIPアドレスまたはユーザーごとにレート制限したいと思いました(つまり、ユーザーがログインしている場合は、ID、タイムスタンプ、およびIPアドレスを使用して、接続のトレースを保持しています。そうでない場合は、ログインすると、彼のIPアドレスとタイムスタンプをデータベースに保存するだけです)。これを行うためにVoterInterface、ユーザーがコントローラーにアクセスするたびにSymfonyによって呼び出され、APIレート制限を時間単位または日単位で超えていないかどうかを確認するサービスを実装しました(どちらもハードコーディングされています))。これは今まで問題なく動作します。

ただし、よりカスタマイズ可能でスケーラブルなものが必要です。各コントローラーに独自の制限を設定して、各コントローラーのAPIレート制限を簡単に制御および変更できるようにします。私の考えは、で使用できるような注釈を使用し、JMSSecurityExtraBundle各コントローラーの上部に次のようなものを指定することです。

/**
 * My API - UserController::registerAction
 *
 * @RateLimit(hour="200", day="2000")
 */
public function registerAction($format)

次に、レートリミッタークラスの注釈情報を取得して、制限情報を入力します。問題は、どうにかして方法を見つけることができず、助けが必要なことです。私のソリューションは機能します。もっと強力なものが必要です。これらの情報をYAMLファイルまたはデータベースに保存することはすでに考えていましたが、コントローラーと永続性の間に不要な依存関係が生じるため、これは私にとって良い解決策ではありません。

よろしくお願いします。

4

1 に答える 1

1

AOP バンドルを参照してください— それはあなたが望むことをするための手段を提供します。

于 2012-06-09T12:26:45.287 に答える