我们在上一章回中介绍了"如何mock数据"相关的内容,本章回中将介绍如 何打造一个网络框架闲话休提,让我们一起Talk Flutter吧。
概念介绍
最近在项目中使用dio处理网络相关的内容,有些地方的代码不能利用,有些地方的代码耦合度比较高,因此准备在dio上面封装一层网络层,这些可以优化程序的架构,本章回中介绍的网络构架就是指自己封装的网络层,而不是像dio或者retorfit这样的网络框架。
使用方法
封装网络架构主要包含两方面的内容:网络层和适配层。网络层包含请求数据封装,返回数据封装,错误信息封装和网络操作四部分。适配层使用适配器设计模式的的思想,主要用来适配不同的网络请求库,不同的网络库实现适配层中的内容,然后在网络操作中切换不同的适配器就可以。这样可以减少对网络库的耦合。
示例代码
///封装请求类型,创建请求时只需要实现该类中的三个抽象方法就可以
abstract class BaseRequest {
///查询类参数,就是带问号
///path类参数,就是在base url后带其它内容
var pathParams;
var useHttps = true;
///查询参数,通过add方法添加,这个内容就是url中key=value的内容
Map<String,String> queryParams= Map();
Map<String,dynamic> headerParams= Map();
///返回baseUrl
String baseUrl () {
return 'www.base.com';
}
///定义三个抽象方法,子类需要实现这三个方法
///是否需要登录
bool needLogin();
///HTTP请求操作的类型
HttpMethod httpMethod();
///HTTP请求的路径
String path();
String url() {
Uri uri;
var pathStr = path();
///拼接path
if(pathParams != null) {
if(path().endsWith("/")) {
pathStr = "${pathStr}${pathParams}";
}else {
pathStr = "${pathStr}/${pathParams}";
}
}
///区分http和https,uri的方法可以把queryParams中的key和value拼接成key=value&key=value这些的形式
///该方法还可以自动在baseUrl前添加http://或者https://
///该方法还可以在path和queryParams之间添加一个问号表示查询
if(useHttps) {
uri = Uri.https(baseUrl(),pathStr,queryParams);
}else{
uri = Uri.http(baseUrl(),pathStr,queryParams);
}
// debugPrint(uri.toString());
return uri.toString();
}
BaseRequest add(String key, dynamic object) {
queryParams[key] = object.toString();
return this;
}
BaseRequest addHeader(String key, dynamic object) {
headerParams[key] = object.toString();
return this;
}
}
///封装网络操作
Future<Response> send<T> (BaseRequest baseRequest) async {
///通过不同的适配器切换不同的网络请求库
// MockAdapter mockAdapter = MockAdapter();
// var result = await mockAdapter.send(baseRequest);
DioAdapter dioAdapter = DioAdapter();
var result = await dioAdapter.send(baseRequest);
return result;
}
///封装adapter,可以适配不同的网络库
abstract class NetworkAdapter {
Future<Response> send<T>(BaseRequest request);
}
上面的代码中没有封装返回数据和错误信息,这些内容仍然使用dio
返回的Response和DioException类型。此外,我感觉请求类型也不需要封装,毕竟dio提供的网络操作方法中已经包含请求相关的参数,而且是命名参数,看上去一目了然,我们可以像前面章回中一样创建一个config类就可以。后来发现dio给的示例中也是推荐使用config类这种方法。不过我的结论是:网络请求的核心内容是跟在baseUrl后面的path和path后面存放请求参数的map.以及请求的参数options
,比如请求类型GET,POST,请求时的超时设置等。把撑好这三个方面的内容就可以很好地处理网络请求相关的信息。文章来源:https://www.toymoban.com/news/detail-613937.html
看官们,关于"如何打造一个网络框架"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!文章来源地址https://www.toymoban.com/news/detail-613937.html
到了这里,关于第九十四回 如何打造一个网络框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!