当我们有OkHttp时,为什么要使用Retrofit

时间:2016-08-27 16:26:19

标签: java android retrofit okhttp

使用OkHttp,我们可以发出HTTP请求,然后从服务器获取响应

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url(url)
  .build();
Response response = client.newCall(request).execute();

然后用Gson lib将响应转换为我们需要的对象。

这是来自Square / OkHttp doc:

  

它的请求/响应API使用流畅的构建器和   不变性。它支持同步阻塞调用和异步   使用回调调用

我从stackOverFlow

读到
  

如果可用,Retrofit会自动使用OkHTTP

所以我的问题是究竟是什么改造?

改造可以做什么OkHttp不能做什么?!

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

6 个答案:

答案 0 :(得分:70)

  

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

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

  

所以我的问题是究竟是什么改造?

用于生成URL(使用与特定REST API绑定的类型感知生成代码)并使用Gson实际解析JSON。换句话说,它会执行您在代码段中跳过的内容。

此外,对于某些类型的REST操作(例如,POST),它有助于组合要提交的内容(例如,生成编码的表单)。

根据定义,您不需要使用Retrofit。改造是由计算机程序员编写的计算机代码。其他人可以编写代码来做Retrofit所做的事情。

  

为什么Retrofit使用OkHttp

Retrofit需要执行HTTP操作。它使用OkHttp,可用于OkHttp提供的所有内容:HTTP / 2和SPDY支持,可插拔拦截器等。

答案 1 :(得分:27)

如果您尝试在应用程序中映射服务器API(类型安全),则应使用改造。 Retrofit只是一个包装在okHTTP上的API适配器。

如果要输入安全性并使用API​​模块化交互代码,请使用改造。除此之外,okHTTP和Retrofit的基础性能,请求默认值等是相同的。

另外,我建议您听一下Jesse Wilson(主要的Android HTTP客户端开发人员)的this播客,深入介绍Apache HTTP客户端,HTTPURLConnection,okHTTP和Retrofit的开发历史。

答案 2 :(得分:10)

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

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

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

答案 3 :(得分:5)

Retrofit是Square的Android和Java REST客户端。它使通过基于REST的Web服务检索和上载JSON(或其他结构化数据)变得相对容易。在Retrofit中,您可以配置用于数据序列化的转换器。通常对于JSON,您使用GSon,但您可以添加自定义转换器来处理XML或其他协议。 Retrofit使用OkHttp库进行HTTP请求。 为了方便起见,你应该使用okhttp的改造功能。

答案 4 :(得分:0)

Retrofit解决的问题是:从远程服务器获取对象的OKHttp代码是罗嗦的。

答案 5 :(得分:0)

Retrofit基本上是OKHTTP之上的体系结构,它内部使用OkHttp发出任何请求,在jave的较早版本中,如果我们要发出任何请求,我们具有HTTPUrl连接或HTTPS Url连接就知道翻新okHttp处理所有操作(它分为标记为包的包)标头),以便我们发送一些信息。

Retrofit是基于restful原则的rest客户。

-> OkHttp是一个HTTP客户端,它支持HTTP / 2和SPDY。

-> Retrofit是适用于android和java的类型安全的HTTP客户端

-> OkHttp取决于Okio。

->改装取决于OkHttP,

因此Retrofit基本上是OKHTTP的包装,它在必要时使用,并且仅使用它的方法就可以轻松管理连接超时和读取超时,并且还添加了Interceptor。

希望我回答了!!!编码愉快!!!

有关更多信息,请参见https://square.github.io/retrofit