API 本身是系统间通信契约,合理的 API 设计、调用策略、服务架构可以大幅降低延迟、减少资源消耗,提升整体应用性能;反过来糟糕的 API 会拖垮整个系统。下面分接口设计、调用方式、服务侧优化、客户端优化、架构层面来讲,附带落地要点。
一、API 接口设计层面(治本)
1. 按需返回数据,避免过度返回(Over-fetching)
很多接口一次性返回全量字段,客户端只用到少量数据,浪费带宽、序列化 / 反序列化 CPU。
方案:
字段筛选:支持
?fields=id,name指定返回字段GraphQL:按需查询,适合前端多变查询场景
禁止大对象全返回,区分详情接口和列表接口
反面:列表接口把大文本、二进制、关联子对象全部返回。
2. 分页、游标分页,不一次性返回全量数据
数据量大时一次性返回全部列表,内存、网络、数据库压力爆炸。
偏移分页:
pageNum&pageSize(简单,大数据深页性能差)游标分页(推荐):基于 ID / 时间戳
?after=10086,适合无限滚动,数据库走索引,无深页性能衰减
3. 批量接口合并请求,减少请求次数(减少 RTT)
HTTP 每次请求都有握手、网络往返耗时。前端短时间多次调用多个小接口,会造成请求瀑布。
提供批量接口
/batch,一次传多个查询条件,一次性返回多组数据BFF 层聚合:后端 BFF 服务把多个微服务 API 结果合并,前端只调用一次 BFF
注意:批量接口不要做太大,防止单次请求超时。
4. 合理使用状态码与精简响应体
使用标准 HTTP 状态码,不要全部返回 200,业务错误塞在 body 里,减少解析开销
返回 JSON 时精简 key 命名,避免超长 key;必要场景用 Protobuf、MessagePack 替代 JSON,序列化体积更小、速度更快
二进制资源(图片、文件)不要放在 JSON 里 base64 传输,base64 会增加 33% 体积,返回资源 URL
5. 版本管理,避免接口臃肿
接口迭代不新增冗余字段,旧版本接口逐步下线,防止逻辑分支越来越多拖累性能。
二、API 调用与网络优化
1. 缓存(收益最高)
客户端缓存
HTTP 缓存头:Cache-Control、ETag、Last-Modified,浏览器 / 客户端本地缓存,相同请求直接不访问后端。
服务端缓存
Redis 缓存热点 API 结果:查询类接口优先缓存,减少 DB 访问
多级缓存:本地内存缓存 + 分布式缓存
缓存策略:TTL 过期、主动失效;只读静态接口可长缓存,数据变更接口短缓存
注意:用户私有数据不要全局缓存,加用户维度 key。
2. 连接复用,减少 TCP 握手开销
HTTP/1.1:开启
Keep-Alive复用连接HTTP/2:多路复用,单连接并行多个 API 请求,消除请求阻塞
HTTP/3 (QUIC):解决队头阻塞,弱网环境提升明显
3. 压缩传输
开启 Gzip/Brotli 压缩响应体,文本类 JSON 压缩率很高,减少网络传输耗时。
大二进制文件一般不压缩。
三、API 服务端性能优化
1. 异步接口,处理长耗时任务
查询、同步计算耗时很长时,不要阻塞 HTTP 请求直到完成。 模式:提交任务 → 返回 taskId → 客户端轮询 /websocket 回调获取结果 适用:文件导出、大数据计算、复杂报表。
2. 限流、熔断、降级(保护应用不雪崩)
API 是系统入口,流量突增、下游服务故障会拖垮整个应用。
限流:令牌桶 / 漏桶,限制单 IP / 单 AppKey QPS,防止打爆
熔断:下游 API 持续失败,快速失败,不持续重试
降级:高流量时关闭非核心 API 功能,返回兜底数据,保障核心接口可用
3. 优化接口底层查询
API 慢大多不是接口代码本身,而是底层数据库:
SQL 加索引,避免全表扫描
避免 N+1 查询(列表循环查子数据)
大查询拆分,避免长事务
热点查询走读库,读写分离
4. 超时控制
所有 API 调用(服务之间互相调用)必须设置超时时间,防止一个慢接口把线程池占满。
四、客户端调用侧优化
避免重复请求:前端做请求防抖 / 去重,相同请求未返回前禁止重复提交
合理重试:只有幂等接口(查询、创建可重复)才重试;指数退避重试,禁止无限重试。非幂等接口(扣款)不能重试。
幂等设计:新增 / 修改 API 增加唯一 requestId,保证重复调用不会产生脏数据。
并行请求:无关联的 API 可以并行发起,不要串行调用
五、架构层面优化
BFF 后端为前端层:前端不再直接调用一堆微服务 API,BFF 做聚合裁剪,减少前端请求数量
API 网关:统一入口,做路由、鉴权、限流、缓存、日志,把公共能力抽离,业务服务只关心业务逻辑;网关还可以做灰度发布
事件驱动替代同步 API:非实时场景(消息通知、日志上报)使用 MQ 异步投递,不用同步 HTTP API,削峰,提升主接口响应速度
CDN:静态 API、配置类接口放到 CDN,就近访问
六、性能指标用来衡量 API 优化效果
P95/P99 响应时间(重点,不要只看平均 RT)
QPS、错误率
吞吐量、网络包大小
服务 CPU、内存、DB 连接数
简单总结一句话
提升 API 性能核心思路:减少请求次数、减少传输数据量、减少后端重复计算、避免阻塞、做好保护机制。 优先落地:HTTP 缓存、游标分页、字段精简、BFF 聚合、Redis 热点缓存,这几项投入小收益最大。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢