通过Node和Redis进行API速率限制

Posted 前端全栈开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Node和Redis进行API速率限制相关的知识,希望对你有一定的参考价值。

来源:https://codeburst.io/
作者:Joyce Lin

速率限制可以保护和提高基于API的服务的可用性。如果你正在与一个API对话,并收到HTTP 429 Too Many Requests的响应状态码,说明你已经被速率限制了。这意味着你超出了给定时间内允许的请求数量,你需要做的就是放慢脚步,稍等片刻,然后再试一次。

为什么要速率限制?

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

通过Node和Redis进行API速率限制

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

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

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

如何实施限速?

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

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

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

通过Node和Redis进行API速率限制

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

这是使用Node和Redis制作自己的速率限制器的一种方法:

  1. 创建一个Node应用
  2. 使用Redis添加速率限制器
  3. 在Postman中测试

以上是关于通过Node和Redis进行API速率限制的主要内容,如果未能解决你的问题,请参考以下文章

速率限制系列part2—作用于API网关的速率限制

有没有办法通过 Azure API 管理中的订阅来改变速率限制的值

对第 3 方 API 的请求进行速率限制

使用 Redis 实现分布式速率限制

Laravel - 限制特定 API 路由的速率

Azure API 响应中缺少速率限制标头