App 组件化/模块化之路——如何封装网络请求框架

  • 时间:
  • 浏览:2

关键的代码是在 doRequest() 法律妙招中,该法律妙招实现了网络请求的代码,返回另另1个 Pair<Integer,String>对象,该对象的 first 属性是另另1个请求 code ,用于标识网络请求码(即是网络请求返回的400,404,4001等)。而 second 全都我网络请求的数据。

注意这一类封装是纯粹的网络请求,不应该饱含业务类相关的代码。怎么让 无处置上文提出的另另1个问題。

一般来说,目前绝大每种 App 的数据请求有的是使用 HTTP 协议,而数据交换的协议使用 json 格式。怎么让 都都可以封装另另1个通用的请求接口。(当然还有怎么让 怎么让 协议,类事微信的 mars ,怎么让 封装的思路是一致的,本文为了简单说明,暂时使用通用网络请求框架,不排除然后会对 mars 的封装)

项目地址:https://github.com/wecodexyz/Componentization

怎么让 我们我们 构建的网络请求框架要都都可以处置以下问題:

这另另1个法律妙招全都我具体业务类要处置的逻辑。

这一类全都我网络请求框架提供给业务类使用的另另1个接口。本文一开始就提出来 json 作为交互数据请求的协议。没人此类的封装有的是能够业务数据的访问。

首先预览一下框架形状

这一类是另另1个泛型类,继承于 Request 并对第三方请求库的封装。类事本文全都我对 okhttp 的封装,而泛型 T 对象全都我请求得到的具体数据类型。可能性要对怎么让 请求库进行封装,就都都可以参考这一类的实现。

这一类封装了网络请求的通用接口,定义请求接口 doRequest() 、获取请求连接 getUrl() 、获取请求法律妙招 getHttpMethod() 等。

全都在 App 组件化/模块化开发架构思路 一文中,我们我们 把网络请求作为内核层的另另1个组件。

假设另另1个多请求业务数据接口,返回数据是另另1个字符串。没人我们我们 使用我们我们 的框架全都我那我来使用。本文例子是请求我们我们 项目中的 README.md 的内容。用起来非常简单,假如有一天继承于 BaseTextRequest,并实现 getUrl()onRequestFinish() onRequestError()getHttpMethod() 这2个法律妙招。

在 App 开发中网络请求是每个开发者必备的开发库,也出现了怎么让 优秀开源的网络请求库。类事

注意严格来说这是另另1个业务类,全都是不应该放满 core 目录下的。

这一类是个抽象类,对 IRequest 的实现。目前是另另1个简单封装的实现。

哪此网络请求库很大程度上提高守护线程池池猿的编码时延。怎么让 随着业务的发展,App 变得没人大,我们我们 将哪此网络请求库加入到项目中直接使用,对我们我们 业务类的入侵是非常强的。可能性要进行业务分离时,哪此网络请求代码将是另另1个阻止我们我们 进一步工作的绊脚石。对开发者来说是非常痛苦的。

可能性请求网络是耗时的操作,rxjava2 来实现网络请求异步操作。 request 是对 RequestWrapper.doRequest() 法律妙招的封装,并得到另另1个 Flowable 对象。一齐定义了 onRequestFinish()onRequestError() 另另1个法律妙招。

本文运行的结果