
自己或团队对外提供API接口的朋友应该深有体会——接口写好只算完成了一半工作,另一半是怎么管理调用权限、怎么控制频率、怎么计费结算、怎么看谁在频繁调用、谁在超量请求。最开始可能就是在代码里写死几个appkey和对应的调用次数,后来接入的第三方越来越多,每个客户的套餐不一样,限流策略也不一样,光靠改配置文件根本管不过来。
这套系统就是专门做这个的——统一托管你对外提供的所有API接口,把访问控制、流量调度和商业化计费三件事在一个后台里管起来。每个接口可以单独配置限流策略,比如每秒最多多少次、每天总共多少额度,超出自动返回错误码,不会把你的后端服务打爆。计费方式支持按调用次数扣费、按套餐包月、按阶梯价格三种模式,后台可以给不同客户分配不同的计价规则,调用记录每一笔都存下来,月底导出报表直接对账。
更新这块这次做了几件实在的事。
先说说安全层面。接口通信增加了请求签名校验,客户端需要拿分配的appsecret对参数做签名,服务端收到后验签,防止请求在传输过程中被篡改。同时支持IP白名单限制,可以指定哪些IP地址才能调用某个接口,即使appkey泄露了,不在白名单里的请求也过不来。防重放攻击也做了处理,每个请求带时间戳和随机数,相同参数短时间内重复提交会被拦截。
限流策略比之前更灵活了。以前只能按总调用次数限制,现在可以按接口单独设置,比如查询类接口可以放宽一些,写入类接口收紧一些。支持多维度限流——按用户、按IP、按接口三套维度叠加,不会因为某个用户的异常流量影响到其他正常用户。超限后的返回信息可以自定义,比如返回特定的错误码和提示文案,方便客户端做针对性处理。
用户体验方面的改进也挺实在。后台首页加了实时仪表盘,今天总调用量、成功失败率、当前排队请求数、各接口的QPS曲线,一眼就能看出哪个接口在高峰期压力大。接口管理列表支持按状态、按分组筛选,如果接口数量几十上百个,找起来不会翻半天。日志查询增加了按时间范围、按状态码、按调用来源等多条件组合筛选,排查问题比以前快很多。
安装环境卡得比较死——Nginx + PHP 7.4 + MySQL 5.7,PHP扩展要开PDO、PDO_MySQL、JSON、Session、OpenSSL这五个。为什么固定7.4?因为我们把大部分加密和签名逻辑都用这个版本的特性做了性能优化,往上升级到8.x也可以跑,但没有做完整回归测试,生产环境建议先按7.4来。
部署流程就是上传源码到Nginx站点根目录,把runtime和config两个目录设成可写,然后访问域名会自动跳转到安装引导页,检测环境、填数据库信息、设管理员账号、配初始计费规则,一路下一步就行。装完记得删掉/install/目录,防止别人重装覆盖你的数据。
适用场景主要是个人开发者把自己的API能力开放给合作伙伴或客户使用,小团队内部管理多个微服务接口的调用权限,或者SaaS服务商给下游客户提供API订阅服务。数据库量级不大、并发不算太高的情况下,跑在阿里云轻量服务器上就够用了。


