0

我目前正在使用 Symfony2 编写一个 REST API。一个月前我开始使用 Symfony2,目前面临技术难题。

在编写我的 API 时,我想按 IP 地址或用户对 API 调用进行速率限制(即,如果用户已登录,我将使用他的 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 Bundle——它提供了做你想做的事的方法。

于 2012-06-09T12:26:45.287 回答