限制API请求

时间:2011-07-27 21:58:32

标签: php api

我试图找出限制给定密钥的API请求的最佳方法。基本上,我目前有一个名为counter的表字段,其中每个请求我添加1到前一个值。所以我已经记录了每个请求但我的问题是什么是限制输出的最有效方法限制由一个月n个请求数确定的用户。

现在我的解决方案是你只是比较if counter <= n然后继续获取数据,但是有更好的方法吗?考虑到数据被缓存,如果你在计数器的每个请求中查询数据库,你也可以请求数据..

由于

2 个答案:

答案 0 :(得分:5)

您可以使用php memcache之类的东西将与每个键关联的计数器直接存储在内存中。然后,您可以每天一次将所有值备份到数据库中,以防服务器发生故障而丢失内存中的数据时,您将只丢失一天中部分时间的计数。

根据您提供的密钥数量,您必须确定这将使用多少内存,以及它是否是一个实用的解决方案。

你也可以使用中间地带,只缓存每个月达到限制的那些。因此,每当一个键达到它的最大请求数时,你就会在内存中标记它。然后在每个月末,当你重置数据库中的计数时,你也将它们全部清除掉。

这样您就可以向数据库发出请求,直到用户达到限制(因为您无论如何都要查询数据库),然后停止查询表。

答案 1 :(得分:1)

为什么不将计数器存放在单独的表中?或者甚至更好,而不是使用计数器,使用带时间戳的访问日志。每次客户端使用您的服务时,只需使用客户端ID和当前日期和时间进行插入。然后你所要做的就是查询COUNT(*) WHERE client_id = 5 AND date_time >= now() - 30 days(或者其他什么。我认识的不是有效的SQL,给我一个休息时间。)