当我们有 OkHttp 时为啥要使用 Retrofit
Posted
技术标签:
【中文标题】当我们有 OkHttp 时为啥要使用 Retrofit【英文标题】:why use Retrofit when we have OkHttp当我们有 OkHttp 时为什么要使用 Retrofit 【发布时间】:2017-01-04 03:06:47 【问题描述】:使用 OkHttp 我们可以发出 HTTP 请求然后从服务器获取响应
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
然后使用 Gson lib 将响应转换为我们需要的对象。
这是来自 Square/OkHttp 文档:
它的请求/响应 API 是用流畅的构建器设计的,并且 不变性。它同时支持同步阻塞调用和异步 带有回调的调用
我从***读到
如果可用,Retrofit 会自动使用 OkHTTP
.
所以我的问题是改造到底是为了什么?
OkHttp 做不到的 Retrofit 能做什么?!
我认为 OkHttp 和 Gson 解决了请求 API 问题, 那么 Retrofit 为我们解决了什么问题呢?
【问题讨论】:
基于意见,因此可能会被关闭。事实是,两者都存在,没有人死去。这意味着在 android 开发者社区的眼中,两者都有有效的用例。 查看这篇文章***.com/q/16902716/1144203 @isim 我以前看过这个链接,但我不明白为什么需要Retrofit?!以及为什么 Retrofit 使用 OkHttp! @MehrdadFaraji 如果 OkHttp 可以做你想做的事,你就不需要改造。 为什么 Retrofit 使用 OkHttp 比如启用 OkHttpCall
模式、OkHttp 拦截器、证书固定等。
【参考方案1】:
使用 OkHttp 我们可以发出 HTTP 请求然后从服务器获取响应...然后使用 Gson lib 将响应转换为我们需要的对象
请注意,在您的代码 sn-p 中,您跳过了两个值得注意的步骤:生成 URL 和使用 Gson 实际解析 JSON。
所以我的问题是改造到底是为了什么?
它用于生成 URL(使用与特定 REST API 相关的类型感知生成代码)并使用 Gson 实际解析 JSON。换句话说,它会执行您在代码 sn-p 中跳过的操作。
此外,对于某些类型的 REST 操作(例如,POST),它有助于组装要提交的内容(例如,生成编码表单)。
根据定义,您不需要使用 Retrofit。改造是计算机代码,由计算机程序员编写。其他人可以编写代码来做 Retrofit 所做的事情。
为什么 Retrofit 使用 OkHttp
Retrofit 需要执行 HTTP 操作。它在可用的情况下使用 OkHttp,因为 OkHttp 提供的所有功能:HTTP/2 和 SPDY 支持、可插入拦截器等。
【讨论】:
【参考方案2】:如果您尝试在应用程序中映射服务器 API(类型安全),则应该使用改造。 Retrofit 只是一个封装在 okHTTP 上的 API 适配器。
如果您想使用 API 进行安全输入和模块化交互代码,请使用改造。除此之外,okHTTP 和 Retrofit 的底层性能、请求默认值等都是相同的。
我还建议收听 Jesse Wilson(主要 android HTTP 客户端的开发人员)的 this 播客,他在其中深入探讨了 Apache HTTP 客户端、HTTPURLConnection、okHTTP 和 Retrofit 的开发历史。
【讨论】:
【参考方案3】:改造与 OkHttp 原因很简单:OkHttp 是一个纯 HTTP/SPDY 客户端,负责任何低级网络操作、缓存、请求和响应操作等等。相比之下,Retrofit 是建立在 OkHttp 之上的高级 REST 抽象。 Retrofit 2 与 OkHttp 强耦合并大量使用它。
OkHttp 函数: 连接池、gzip、缓存、从网络问题中恢复、同步和异步调用、重定向、重试……等等。
改造功能: URL 操作、请求、加载、缓存、线程、同步......它允许同步和异步调用。
【讨论】:
【参考方案4】:Retrofit 基本上是 OKHTTP 之上的架构,它在内部使用 OkHttp 来发出任何请求,在 jave 早期,如果我们想要发出任何请求,我们有 HTTPUrl 连接或 HTTPS Url 连接知道改造 okHttp 处理一切(它分为它标记的包headers )如果我们需要发送一些信息给我们。
Retrofit是一个基于restful原则的rest客户端。
->OkHttp是一个HTTP客户端,支持HTTP/2和SPDY。
->Retrofit 是适用于 android 和 java 的类型安全 HTTP 客户端
->OkHttp 依赖于 Okio。
->改造依赖于OkHttP,
所以 Retrofit 基本上是 OKHTTP 的一个包装器,它在必要时使用,并且可以轻松管理连接超时和读取超时,只需使用它的方法,还添加了拦截器。
希望我回答!编码愉快!!!
更多信息请参考https://square.github.io/retrofit
【讨论】:
【参考方案5】:OkHttp:一个开源的 HTTP 客户端。 HTTP 是现代应用程序网络的方式。这就是我们交换数据和媒体的方式。高效地执行 HTTP 可以让您的内容加载更快并节省带宽; Retrofit:适用于 Android 和 Java 的类型安全 HTTP 客户端。 Retrofit 将你的 HTTP API 变成一个 Java 接口。
OkHttp 和 Retrofit 可以主要归类为“API”工具。
OkHttp 提供的一些功能包括: • HTTP/2 支持允许对同一主机的所有请求共享一个套接字。 • 连接池减少了请求延迟(如果 HTTP/2 不可用)。 • 透明的 GZIP 缩小了下载大小。
另一方面,Retrofit 提供以下主要功能: • URL 参数替换和查询参数支持 • 对象转换为请求正文(例如,JSON、协议缓冲区) • 多部分请求正文和文件上传
【讨论】:
以上是关于当我们有 OkHttp 时为啥要使用 Retrofit的主要内容,如果未能解决你的问题,请参考以下文章