背景
在日常的业务开发中,HTTP 客户端的封装可以说是最为常见的基础模块,无论是调用第三方 API 服务、对接内部微服务还是抓取外部数据,几乎每一个项目中都能看到类似于 HttpUtils 或 HttpClientWrapper 的身影。然而看似简单的网络请求,在不同的经验层级与架构范式下,写出来的代码质量与设计哲学却有着天壤之别。很多初级的封装仅仅停留在‘把功能调通’的阶段,忽略了底层 TCP 连接池、资源生命周期管理以及超时控制,为线上高并发场景埋下了严重的性能与稳定性隐患。
本文将以一个普通的 HTTP 客户端封装为例一步步演进重构,探讨如何写出完善严谨的代码,并借此梳理软件架构设计与编程范式的变迁。
第一次封装
在一些祖传项目或是更早的基于 JDK 1.7 以及后来的 JDK 8 项目中经常可以看到 Apache HttpClient 类库的身影,以下参考的 HttpUtils 可能是某个项目上默默工作的最为平凡的封装。