给我的朋友写了一个 API 限流组件
内容提要
本文介绍了如何使用手写的限流组件,通过定义抽象类接口、创建者和执行者来管理限流对象,并使用缓存类记录流量信息。最后将限流功能封装为一个组件,并以中间件的方式进行注入。通过添加配置和测试,实现了一个易扩展的 API 限流组件。
关键要点
-
文章介绍了如何手动开发一个限流组件,以满足特定业务需求。
-
限流组件需要支持IP限流、用户限流和特殊权限的情况。
-
首先定义了一个抽象类接口IRateLimiting,包含限流行为和属性。
-
为了应对复杂的业务场景,建议创建多个限流对象,如ICodeRateLimiting和IAccountRateLimiting。
-
使用创建者模式来管理限流对象的实例化,定义了IRateLimitingCreator接口。
-
执行者IRateLimitingExecute用于更新限流信息并检查是否限流。
-
实现了IRateLimiting接口的抽象类RateLimiting,提供了基本的限流逻辑。
-
通过继承RateLimiting类,可以实现不同的限流策略,如按分钟、小时或天数限流。
-
使用IRateLimitingCreator实例化具体的限流对象,如MinuteRateLimiting。
-
提供了两种限流实现方式:按IP限流和按IP+请求ID+请求路径限流。
-
流量记录可以使用数据库、Redis或内存缓存等方式,推荐使用ConcurrentDictionary进行线程安全存储。
-
将限流功能封装为组件,并以中间件的方式进行注入。
-
提供了配置选项RateLimitingOption,允许用户自定义限流次数。
-
实现了限流中间件RateLimitingMiddleware,记录访问日志并处理限流逻辑。
-
通过服务注入和中间件配置,完成限流组件的集成。
-
最终实现了一个手写且易扩展的API限流组件。