通过节点+雷迪如何实现API速率限制

  介绍

通过节点+雷迪如何实现API速率限制?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

速率限制可以保护和提高基于API的服务的可用性。如果你正在与一个API对话,并收到HTTP 429太多的请求的响应状态码,说明你已经被速率限制了。

为什么要速率限制?

当你考虑限制你自己的基于API的服务时,你需要在用户体验,安全性和性能之间进行权衡。

通过节点+雷迪如何实现API速率限制

控制数据流的最常见原因是保持基于API的服务的可用性。但也有安全方面的好处,一次无意或有意的入站流量激增,就会占用宝贵的资源,影响其他用户的可用性。

通过控制传入请求的速率,你可以:

    <李>保障服务和资源不被“淹没”。 <李>缓和暴力攻击 <李>防止分布式拒绝服务(DDOS)攻击

如何实施限速?

速率限制可以在客户端级别,应用程序级别,基础架构级别或介于两者之间的任何位置实现。有几种方法可以控制API服务的入站流量:

    <李> <强>按用户:跟踪用户使用API密钥,访问令牌或IP地址进行的调用 <李> <强>按地理区域划分:例如降低每个地理区域在一天的高峰时段的速率限制李 <李> <强>按服务器强:如果你有多个服务器处理对API的不同调用,你可能会对访问更昂贵的资源实施更严格的速率限制。

你可以使用这些速率限制中的任何一种(甚至组合使用)。

通过节点+雷迪如何实现API速率限制

无论你选择如何实现,速率限制的目标都是建立一个检查点,该检查点拒绝或通过访问你的资源的请求。许多编程语言和框架都有实现这一点的内置功能或中间件,还有各种速率限制算法的选项。

这是使用节点和复述,制作自己的速率限制器的一种方法:

    <李>创建一个节点应用 <李>使用复述,添加速率限制器李 <>李在邮递员中测试李
在GitHub上查看代码示例。

在开始之前,请确保已在计算机上安装了节点和复述。

步骤1:建立节点应用程序

从命令行设置一个新节点的应用。通过CLI提示,或添加<代码> - 标志来接受默认选项。

npm init美元——是的

如果在项目设置过程中接受了默认选项,则为入口点创建一个名为<代码>索引。js代码的文件。

触摸美元指数。js

安装表达Web框架,然后在<代码>索引。js代码中初始化服务器。

const表达=要求(& # 39;表达# 39;)   const应用=表示()=process.env const港口。港| | 3000      app.get(& # 39;/& # 39;(点播,res)=比;res.send (& # 39; Hello World ! & # 39;))   app.listen(港口,()=比;控制台。日志(“示例应用倾听http://localhost: ${港口}'))

从命令行启动服务器。

节点美元指数。js

回到<代码>索引。js代码中,创建一个路,由先检查速率限制,如果用户没有超过限制再允许访问资源。

app.post(& # 39;/& # 39;异步(点播,res)=比;{   异步函数isOverLimit (ip) {//定义   }//检查率限制   让overLimit=等待isOverLimit (req.ip)   如果(overLimit) {   res.status (429) .send(& # 39;太多的请求,再试一次后,)   返回   }//允许访问资源   res.send(“珍贵的资源访问!“)   })

通过节点+雷迪如何实现API速率限制

在下一步中,我们将定义速率限制器函数<代码> isOverLimit>

步骤2:使用复述,添加速率限制器

复述是一个内存中键值数据库,因此它可以非常快速地检索数据。使用复述,实施速率限制也非常简单。

    <李>存储一个像用户IP地址一样的关键。 <李>增加从该IP发出的调用数量 <李>在指定时间段后使记录过期

下图所示的限速算法是一个<强>滑动窗口计数器的例子。一个用户如果提交的调用数量适中,或者随着时间的推移将它们分隔开,就永远不会达到速率限制。超过10秒窗口内最大请求的用户必须等待足够的时间来恢复其请求。

通过节点+雷迪如何实现API速率限制