在开发 RESTful API 时,为了防止恶意攻击和保障 API 的稳定性,我们需要添加访问频率限制。但是具体如何实现呢?下面我们就为大家详细介绍它的实现方法。
什么是访问频率限制?
访问频率限制就是指针对 API 接口进行访问次数的限制,即限制同一 IP 地址的访问次数。如果用户访问超过最高限制次数,则 API 将拒绝后续请求。
如何实现访问频率限制?
第一步:安装依赖
首先我们需要安装一个专门的包 ratelimiter,使用该包可以方便地实现访问频率限制。
npm install ratelimiter --save
第二步:编写中间件
接下来,我们编写一个中间件函数 rateLimitMiddleware,用于在 Express 应用程序中为 API 添加访问频率限制。
// javascriptcn.com 代码示例 const RateLimiter = require('ratelimiter'); function rateLimitMiddleware(req, res, next) { const limiter = new RateLimiter({ id: req.ip, max: 100, // 最大请求数限制 duration: 60 * 1000 // 每分钟 }); limiter.get((err, rateInfo) => { if (err) { return next(err); } res.set('X-RateLimit-Limit', rateInfo.total); res.set('X-RateLimit-Remaining', rateInfo.remaining - 1); res.set('X-RateLimit-Reset', rateInfo.reset); if (rateInfo.remaining) { return next(); } const timeToWait = (rateInfo.reset - Date.now()) / 1000; res.set('Retry-After', timeToWait); res.status(429).send({ error: `Rate limit exceeded. Try again in ${timeToWait} seconds.` }); }); } module.exports = rateLimitMiddleware;
第三步:将中间件添加到 API 路由中
接下来,我们需要将中间件 rateLimitMiddleware 添加到 API 路由中,包括登录注册方法。
// javascriptcn.com 代码示例 const rateLimitMiddleware = require('./rateLimitMiddleware'); // 登录 app.post('/api/login', rateLimitMiddleware, function(req, res) { // your code here }); // 注册 app.post('/api/register', rateLimitMiddleware, function(req, res) { // your code here }); // 其他路由方法
第四步:测试 API
完成以上步骤后,我们在 Postman 等工具中测试 API,即可看到添加的访问频率限制是否生效。
总结
本文介绍了如何为 RESTful API 添加访问频率限制,访问频率限制是保护 API 服务的有效手段,让您的 API 服务更安全、稳定。我们可以使用 ratelimiter 包实现访问频率限制,并通过中间件函数 rateLimitMiddleware 将它集成到 Express 应用程序中。在实际开发中,应针对不同的 API 方法设置不同的限制。
参考文献
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6546d0d77d4982a6eb12f5ca