我正在构建的应用程序会对Facebook Graph API进行大量调用(但它可能是任何具有速率限制的API)。为了论证,我们说限制是每10分钟600个请求。
我正在使用https://github.com/jhurliman/node-rate-limiter对单个线程进行速率限制,但我需要做的是对宏应用级别的所有Facebook API调用进行速率限制,以便整个应用程序不超过该限制。
我真的不知道如何做到这一点。我对节点很新,并且没有关于这个解决方案甚至看起来像什么的概念。
最好知道Facebook的速率限制是针对每个应用还是每个经过身份验证的用户。我正在假设app,因此出现了这个问题。
答案 0 :(得分:2)
如果您需要根据所有请求的汇总率限制对特定资源的访问,我会创建一个单独的http服务来封装和控制对该资源的所有访问。
假设您正在使用express,并且您的应用程序在端口80上运行,如:
var express=require('express'),
app=express();
app.get(route,function(req,res){
... do things here that need access to the FB Graph API
});
app.listen(80);
我将以下几行添加到您的app.js,创建一个在端口8080上运行的新服务器:
var fbApiGatewayApp=express();
fbApiGatewayApp.get('/fb',function(req,res){
... provide access to FB Graph API here
});
fbApiGatewayApp.listen(8080);
您为其创建的路由控制对FB API的访问。
当需要向FB API提交请求时,重构原始应用程序,使其仅调用此新网关服务上的路由(通过http.js)。
然后,您可以对此新服务进行速率限制,以满足FB的要求。
我还要让它拒绝所有不是来自您的主应用程序(在localhost - 127.0.0.1上运行)的请求,以限制来自外部世界的访问。 (使用防火墙也可以实现相同目的。)