别再把API当免费水电了——聊聊你天天碰的API管理技术
上周三凌晨两点,我手机震到快掉床底。是之前做外卖SaaS的老周,电话里嗓子哑得像砂纸磨,说系统全瘫了,用户付不了款,骑手取不了餐,后台堆了两千多单待处理。
我爬起来远程登上去看,没五分钟就找到问题——他们给合作的第三方配送商开的API接口,被人爬了。一分钟八千次请求,直接把服务器带宽干到100%,所有正常的业务请求根本挤不进去。
老周之前还拍胸脯说,不就是把接口地址给对方嘛,写个参数传过去就完事了,搞那么复杂干啥?
我当时就气笑了。你这哪是开接口,你这是把自家大门密码全贴电线杆上了,不被人闯空门才怪。
外卖SaaS系统API流量异常波动监控截图
就老周那个系统,之前连最基础的鉴权都没有,谁拿到接口地址,想调多少次就调多少次。我给他搭完最基础的管理规则之后,半个月就拦了三次恶意爬取,每次都是陌生IP拿着别人的旧接口地址在试,要是搁之前,这些请求全都会直接打到服务器上。
企业级API管理平台限流规则配置界面
API管理从来不是买个工具就完事的事。你得对着自己的业务场景,一条一条把规则磨出来。比如对外给合作方的接口,要严格;内部测试用的接口,就别往公网上放;给大促准备的临时接口,要单独配对应的流量上限,别和核心业务接口抢资源。
很多人说,我们团队小,就三五个接口,犯得着做API管理吗?
真等你接口改了个字段,忘了通知对接的客户,把人家的业务搞崩的时候,你就知道犯不犯得着了。之前有个做企业微信服务商的团队,改了个用户信息接口的返回字段,原来的user_name改成了nick_name,没发通知,结果对接的二十多个客户全报500错误,客服电话被打爆了,赔了快十万的补偿金。要是有API管理平台的自动变更通知功能,改了接口之后自动给所有调用方发提醒,甚至能做个过渡版本兼容老的返回字段,哪会出这种事?
没经历过接口崩掉的凌晨,根本不懂API管理的意义
很多人对API的理解,就是“两个系统之间传数据的通道”。这话没错,但漏了最关键的部分——这个通道不是你家客厅的门,开了就开了,来的都是客人。互联网上的通道,你只要把地址扔出去,十分钟之内就能被全网的爬虫扫到。 你不给通道装门禁,就没人管谁能进;你不给通道设限速,就有人能把通道堵得水泄不通;你不记下来谁进过、带了啥东西,真出了事连追责的地方都没有。 这就是API管理技术最朴素的作用。不是什么高大上的企业级黑科技,就是给你这些对外开的接口,配上能落地的防护规则。 比如给每个合作方发专属的身份标识,也就是接口鉴权的密钥,没带密钥的请求直接拦在外面;给每个合作方设好流量限流阈值,一分钟最多能调多少次接口,超了就直接返回错误,哪怕是真的业务涨了要提额,也得走申请流程;把每一次调用的请求参数、返回结果、调用时间全存成全链路调用日志,真出了问题,顺着日志就能找到是哪个环节出的错。
外卖SaaS系统API流量异常波动监控截图
就老周那个系统,之前连最基础的鉴权都没有,谁拿到接口地址,想调多少次就调多少次。我给他搭完最基础的管理规则之后,半个月就拦了三次恶意爬取,每次都是陌生IP拿着别人的旧接口地址在试,要是搁之前,这些请求全都会直接打到服务器上。
别把装了网关,等同于做好了API管理
我见过太多团队踩这个坑。觉得花大价钱买个商用API网关,把所有接口都导进去,就算做完API管理了。 错。 网关本质上就是个高速收费站。你把收费站建在高速入口,不设车道限速,不查超载,不记车牌,那车随便跑,该堵还是堵,该出事故还是出事故。 之前有个做电商的朋友,团队三十多个人,去年花了几十万上的商用网关,就开了个最基础的鉴权功能,别的策略啥都没配。618大促的时候,他们对接的一个内容平台的爬虫出了bug,一分钟打了十万次商品详情的API请求,直接把底层的商品数据库连接数打满,整个站的商品列表全刷不出来。 等他们发现问题的时候,已经过去了四十分钟,客服后台的投诉消息堆了上千条,算下来直接间接损失快二十万。 你说他们没做API管理吗?他们有网关啊。但他们没给不同的合作方配对应的限流规则,没监控异常的流量波动,没做接口的版本兼容策略,甚至连哪个请求是哪个平台发的都分不清。
企业级API管理平台限流规则配置界面
API管理从来不是买个工具就完事的事。你得对着自己的业务场景,一条一条把规则磨出来。比如对外给合作方的接口,要严格;内部测试用的接口,就别往公网上放;给大促准备的临时接口,要单独配对应的流量上限,别和核心业务接口抢资源。
很多人说,我们团队小,就三五个接口,犯得着做API管理吗?
真等你接口改了个字段,忘了通知对接的客户,把人家的业务搞崩的时候,你就知道犯不犯得着了。之前有个做企业微信服务商的团队,改了个用户信息接口的返回字段,原来的user_name改成了nick_name,没发通知,结果对接的二十多个客户全报500错误,客服电话被打爆了,赔了快十万的补偿金。要是有API管理平台的自动变更通知功能,改了接口之后自动给所有调用方发提醒,甚至能做个过渡版本兼容老的返回字段,哪会出这种事?