XJNetWorking
XJNetWorking介绍
XJNetWorking
是一个基于AFNetworking
封装的iOS网络请求库,提供了更高层次的网络访问抽象。通常作为网络请求基类使用,是一种集成的网络库。
关于集约式和离散式
集约式
项目中的每个请求都会走统一的入口,对外暴露了请求的URL和参数以及请求的方式,入口一般通过单例实现,AFNetworking的官方demo就是采用集约式的方式封装网络请求,目前也是比较流行的网络请求方式。
优点
- 使用便捷,能实现快速开发
缺点
- 对每个请求的定制性不够强,每个网络请求的自由度不高
- 不利于后期业务扩展
离散式
即每个网络请求类都是一个对象,URL以及请求和响应的方式均不暴露给外部。只能通过内部通过重载或实现协议
的方式实现,外部调用只需要传参数即可,YTKNetwork就是采用这种网络请求方式。
优点
- URL和请求与响应的方式不暴露给外部,避免外部调用时出错。
- 业务方面使用起来比较简单,业务使用者不需要关心其内部实现
- 可定制性强,可以为每个网络请求设置特定超时时间等。
缺点
- 网络层需要业务实现去编写,这实际上增加了部分工作量(因为自由度较高)
关于集约式和离散式的思考
离散式的网络请求更适合项目相对复杂、人数较多的公司使用。因为项目复杂时,与服务器对接可能会出现各种不同的需求,适合不同人进行不同实现。
集约式的网络请求更适合项目相对简单、创业型公司使用。因为创业型公司项目通常处于起步阶段,一般项目初期比较简单,对开发速度要求较高,因此适合这种统一管理的请求,即使有个别特殊需求也可以个别处理。
XJNetWorking 的使用
XJNetWorking 包括以下几个基本的类:
XJRequestBasicConfig
类:用于统一设置网络请求的服务器、公共参数和网络结果解析设置XJBaseDataSource
类: 所有网络请求按业务需求模块继承此类,将模块的网络请求封装进此子类中。XJRequestConfig
类:每个网络请求的信息,包括请求URL、参数、请求方式等<XJRequestResultProtocol>
类:每个网络请求的结果都通过此类型传递给外部
接下来,我们将详细说明它们的作用。我们还需要在APP启动时,设置好网络请求的配置。例如:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
XJRequestBasicConfig * basicConfig = [XJRequestBasicConfig sharedConfig];
[basicConfig setBaseURL:@"http://baidu.com" forPlantform:XJDevelopPlantformRelease];
[basicConfig setBaseURL:@"http://develop.baidu.com" forPlantform:XJDevelopPlantformDebug];
[basicConfig setBaseURL:@"http://test.baidu.com" forPlantform:XJDevelopPlantformTest];
[basicConfig setBaseURL:@"http://uat.baidu.com" forPlantform:XJDevelopPlantformUAT];
basicConfig.publicParameter = @{@"version":@"1.0"};
}
在XJBaseDataSource
的子类中创建网络请求即可,例如:
- (void)loginWithUserName:(NSString *)name password:(NSString *)password complete:(void(^)(NSObject * userInfo))complete {
XJRequestConfig * config = [XJRequestConfig config];
config.requestURL = @"user/login";
config.paramDic = @{@"name":name,
@"pwd":password,
};
config.mappingModel = [NSObject class];//这里应该是UserInfoModel 啦,如果不设置就是不映射。以原数据返回
[self.requestService sendRequestWithConfig:config complete:^(id<XJRequestResultProtocol> result) {
if (result.isSuccess) {
complete(result.modelInfo);
}else{
NSLog(@"请求失败:%@",result.errorMsg);
complete(nil);
}
}];
}
XJNetWorking的一些说明
- XJNetWorking适合创业初期的App,需要快速开发的
- XJNetWorking目前尚未支持数据缓存,因为大多缓存都希望自行实现,所以未包含此功能。未来可能会考虑增加缓存支持。
- XJNetWorking目前不支持与UIKit联动,弹出提示框需要外部设置,大多数公司都有自己的一套弹窗设计方案。未来会考虑添加此功能。
- 想要添加的功能可能很多人不会用到,同时会添加额外的类文件,因此会考虑添加的功能可以随时删除,不影响这个库