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

新手上路,请多包涵

使用 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 上读到:

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

所以我的问题是:

  1. Retrofit 到底是做什么用的?
  2. 有什么 Retrofit 可以做而 OkHttp 做不到的?

我觉得OkHttp和Gson解决了request API的问题,但是retrofit给我们解决了什么问题呢?

原文由 Mehrdad Faraji 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

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

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

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

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

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

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

为什么 Retrofit 使用 OkHttp

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

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

如果你想要类型安全并模块化与 API 的交互代码,请使用 retrofit。除此之外,okHTTP 和 Retrofit 的底层性能、请求默认值等是相同的。

我还建议收听 Jesse Wilson(主要 android HTTP 客户端的开发人员) 播客,他在其中深入讨论了 Apache HTTP 客户端、HTTPURLConnection、okHTTP 和 Retrofit 的开发历史。

原文由 geekoraul 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题