为什么有OkHttp时为什么要使用Retrofit


107

使用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具有流畅的构建器和不变性。它支持同步阻塞调用和带回调的异步调用

我从stackOverFlow阅读

如果可用,翻新将自动使用OkHTTP

所以我的问题是Retrofit到底要做什么?

OkHttp无法做到的Retrofit可以做什么?

我认为OkHttp和Gson解决了请求API问题,那么Retrofit为我们解决了什么问题?


2
基于意见的意见可能会因此而封闭。事实是,两者都存在,没有一个死亡。这意味着在Android开发人员社区看来,两者都有有效的用例。
fge


@isim我之前看过此链接,但我不明白为什么需要翻新?!以及为什么Retrofit使用OkHttp!
Mehrdad Faraji

@MehrdadFaraji如果OkHttp可以执行您想要的操作,则不需要翻新。为什么Retrofit会使用OkHttp启用OkHttp Call模式,OkHttp拦截器,证书固定等一些功能
ivan.sim 2016年

与rxjava一起使用改造已成为一种常见的行业惯例,这是使用改造的另一个原因
paul_hundal

Answers:


95

使用OkHttp,我们可以发出HTTP请求,然后从服务器获取响应...然后,使用Gson lib将响应转换为我们需要的对象

请注意,在代码段中,您跳过了两个值得注意的步骤:生成URL和使用Gson实际解析JSON。

所以我的问题是Retrofit到底要做什么?

它用于生成URL(使用绑定到您的特定REST API的类型感知生成的代码)并使用Gson实际解析JSON。换句话说,它可以完成您在代码片段中跳过的操作。

而且,对于某些类型的REST操作(例如POST),它在组装要提交的内容(例如,生成编码形式)方面有所帮助。

根据定义,您不需要使用翻新。改造是由计算机程序员编写的计算机代码。其他人可以编写代码来完成Retrofit的工作。

为什么翻新使用OkHttp

改造需要执行HTTP操作。它使用OkHttp在可用的情况下为OkHttp提供的所有功能:HTTP / 2和SPDY支持,可插入拦截器等。


32

如果尝试在应用程序内部映射服务器API(类型安全),则应使用改造。改造只是包裹在okHTTP上的API适配器。

如果要键入安全类型并使用API​​模块化交互代码,请使用翻新版。除此之外,okHTTP和Retrofit的基本性能,请求默认值等是相同的。

此外,我会建议听这个从杰西·威尔逊(主要的Android HTTP客户端的开发者),在那里他深入Apache的HTTP客户端,HttpURLConnection类,okHTTP和改造的发展史会谈播客。


23

翻新与OkHttp 对比原因很简单:OkHttp是一个纯HTTP / SPDY客户端,负责任何低级网络操作,缓存,请求和响应操作等。相反,Retrofit是在OkHttp之上构建的高级REST抽象。Retrofit 2与OkHttp紧密结合,并大量使用了它。

OkHttp功能:连接池,gzip,缓存,从网络问题中恢复,同步和异步调用,重定向,重试……等等。

改造功能: URL操作,请求,加载,缓存,线程,同步...它允许同步和异步调用。


7

Retrofit是Square提供的适用于Android和Java的REST客户端。它使通过基于REST的Web服务检索和上传JSON(或其他结构化数据)相对容易。在改造中,您可以配置哪个转换器用于数据序列化。通常,对于JSON,您可以使用GSon,但是您可以添加自定义转换器来处理XML或其他协议。Retrofit将OkHttp库用于HTTP请求。您应该在okhttp上使用翻新功能,以简化其功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.