多网络库组件化sdk

背景

个人一直在从事某国际娱乐App的网络优化事项,最初的网络接口的形态相对比较涣散,为了能够更高效、稳定的进行网络优化,我们提出将App的网络进行组件化。经过进一步的讨论,我们提出了以下3个方面:

  • 保持业务上层的使用不变,避免大面积的业务逻辑变动,从而给业务同学带来额外的使用成本
  • 组件化抹平多网络库的上层稳定Api,提供稳定、可扩展的上层Api
  • 在组件化中提供网络优化能力下沉,将网络优化能力在网络组件中进行

优化前后的网络形态对比

没有优化时的网络形态

  • 基本上都是直接去实现对应模块的网络数据
  • 通用一些的就是使用已经封装好的utils来支撑
  • 各个模块非常的零散,这给优化也带来的挑战

优化后的大概层次结构

  • 上层使用统一的Api
  • 网络组件中支持众多的扩展,更好的支撑来业务的可变性
  • 网络组件中抹平了不同网络库之间的差异,提供了口径统一的监控体系
  • 组件化网络中提供了Gson、Json、PB、文件下载(支持续传)、重试、网络库、域名的调度能力,能够进一步的提高容错能力

目前状态

目前网络组件已经非常稳定,支撑了目前短链的所有请求。将使用和优化进行分离,业务同学不需要关系当前情况,而只需要简单的了解Api的使用,提高的业务开发对网络的复杂度。

组件化网络库的架构设计

我们先看看网络请求的流程结构图:

  • 网络请求流程大体分为以上的流程,该流程不涉及具体的网络库中的处理细节,这里注重的是网络组件化的处理(面向业务)

大致架构的结构图

  • 网络组件化主要是面向业务,提供可扩展的业务能力,同时能够在组件化内完成网络优化细节