XJNetworking 1.0.2

XJNetworking 1.0.2

‘LiuGuLu’维护。



 
依赖
AFNetworking~> 3.2.1
MJExtension~> 3.0.13
 

  • 作者:
  • liuxj

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的一些说明

  1. XJNetWorking适合创业初期的App,需要快速开发的
  2. XJNetWorking目前尚未支持数据缓存,因为大多缓存都希望自行实现,所以未包含此功能。未来可能会考虑增加缓存支持。
  3. XJNetWorking目前不支持与UIKit联动,弹出提示框需要外部设置,大多数公司都有自己的一套弹窗设计方案。未来会考虑添加此功能。
  4. 想要添加的功能可能很多人不会用到,同时会添加额外的类文件,因此会考虑添加的功能可以随时删除,不影响这个库