网络框架是每个应用的基石,封装一个好的网络框架不仅是项目的一个好的开始,并且直接影响到随后项目的稳定性和可扩展性。在移动开发的各个端都有非常赞的网络请求基础框架,比如Android的okhttp库、swift的Almofire库,包括dart的dio库。我们都需要在这些库的基础上封装适合我们项目的网络请求模块,其中包括API的封装、请求类的构造、公共参数的处理、请求头及cookie的处理、日志及拦截器的封装、错误处理及数据实例化。

结合最近的项目梳理下基于dio库封装flutter项目的网络框架封装细节。有对swift项目的网络框架感兴趣的可以看下之前写的一篇文章 【实践】使用“Alamofire+HandyJSON+结构体+泛型”封装网络架构)

简陋的架构图

flutter iOS 网络权限无法弹出 flutter网络请求框架_API

接下来根据该架构图,细解三个模块的代码。

API Modules

类似于项目中的各个模块,我们需要将api分组,例如UserApis.

flutter iOS 网络权限无法弹出 flutter网络请求框架_网络框架_02

代码比较容易理解,通过RequestBuilder构造一个Request,然后通过Net进行请求,结合架构图很容易理解。这里通过NetError进行错误封装并通过回调函数,交由具体的API调用处进行处理。

flutter iOS 网络权限无法弹出 flutter网络请求框架_网络框架_03

Request Builder

这里我们定义一个Request类,包含了每个请求的具体配置,包括请求地址、请求参数、请求方法、是否需要加解密。然后封装一个Requst的构造者RequestBuilder。

flutter iOS 网络权限无法弹出 flutter网络请求框架_封装_04

Request Sender

最后也是最重要的一步,根据第二步提供的Request配置,通过dio进行请求的发送,这里分三小步:公共性配置、发送请求、解析数据。

公共性配置

包括:header、content-Type、responseType、connectTimeout(超时时长设置)、interceptor(拦截器);我们将这些内容配置在初始化dio的地方。

flutter iOS 网络权限无法弹出 flutter网络请求框架_dio设置自定义post请求_05

发送请求

flutter iOS 网络权限无法弹出 flutter网络请求框架_API_06

这段代码在基于公共性配置 的基础上,结合Request和公共参数提供类配置这次请求的请求参数,并发送get或post请求。

解析数据

最后一步比较简单,对请求结果进行处理。根据Request配置进行解密或直接功过convert库获取json数据,最终回调给API Module层,进行数据的实例化。

flutter iOS 网络权限无法弹出 flutter网络请求框架_dio设置自定义post请求_07

至此完结,整个流程还是比较明了的。