OkHttp:Square 出品的 JavaAndroid HTTP 客户端
文章目录OkHttpSquare 出品的 Java/Android HTTP 客户端做了哪些事接口设计遵循规范兼容性和依赖测试支持一句话总结OkHttpSquare 出品的 Java/Android HTTP 客户端做 Java 或 Android 开发的人基本都绕不开网络请求。原生 HttpURLConnection 用起来繁琐自己封装又容易出各种边界问题。Square 公司开源的 OkHttp就是专门解决这个问题的 HTTP 客户端库目前在 GitHub 上有 4.7 万 Star。做了哪些事OkHttp 的设计目标很明确让 HTTP 请求更高效、更可靠。效率方面它默认支持 HTTP/2同一个主机的多个请求可以复用同一个 TCP 连接。如果服务端不支持 HTTP/2它会自动退回到连接池模式减少握手开销。响应体默认开启 GZIP 压缩重复请求还能走本地缓存省掉网络开销。可靠性方面当网络不稳定时OkHttp 会自动处理常见的连接问题。如果某个服务有多个 IP 地址第一个连不上会自动尝试下一个这对 IPv4/IPv6 双栈和多数据中心部署的场景很实用。TLS 方面支持 TLS 1.3、ALPN 和证书锁定。接口设计OkHttp 的 API 风格是 Builder 模式加不可变对象。一个 GET 请求写下来就几行OkHttpClientclientnewOkHttpClient();RequestrequestnewRequest.Builder().url(url).build();try(Responseresponseclient.newCall(request).execute()){returnresponse.body().string();}POST 请求类似构造一个 RequestBody 塞进去就行。同步和异步两种调用方式都支持异步走回调。遵循规范OkHttp 严格遵循 HTTP 相关的 RFC 标准包括 HTTP 语义RFC 9110、缓存RFC 9111、HTTP/1.1RFC 9112、HTTP/2RFC 9113、WebSocketRFC 6455和 SSE。当规范有歧义时它参考主流浏览器和常见 HTTP 库的行为。这种有原则的设计也带来了一些限制比如不允许 GET 请求带 body缓存也不是可替换的接口。对大多数业务场景来说这些限制不是问题。兼容性和依赖OkHttp 支持 Android 5.0API 21和 Java 8。它依赖 Okio 做高性能 I/O依赖 Kotlin 标准库两个都是小体量的库向后兼容性好。安全方面OkHttp 使用平台内置的 TLS 实现。在 Java 平台上还支持 Conscrypt把 BoringSSL 集成进来加一行代码就能启用。官方建议保持版本更新毕竟 HTTPS 客户端的安全补丁不能拖。测试支持项目自带 MockWebServer可以模拟 HTTP/HTTPS/HTTP/2 服务端用于测试。不过官方说明这个库主要用于内部测试和基础场景功能有限复杂需求建议用 MockServer 这类专业工具。构建方面OkHttp 已经是 Kotlin Multiplatform 项目Maven 用户需要注意选 okhttp-jvm 或 okhttp-android。Gradle 用户直接用 BOM 管理版本就行官方给了现成的配置示例。还支持 GraalVM Native Image 和 Java 9 Modules。一句话总结如果你在做 Java 或 Android 的网络层OkHttp 是目前最成熟的选择之一。API 设计干净性能和可靠性经过大量生产验证Square 的维护也一直在线。目前最成熟的选择之一。API 设计干净性能和可靠性经过大量生产验证Square 的维护也一直在线。