我目前正在使用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文件或数据库中,但这对我来说不是一个好的解决方案,因为它会在我的控制器和持久性之间产生不必要的依赖。
提前感谢您的帮助。