针对以下几点介绍:
1.网络接口规范
2.多环境配置
3.网络层数据传递
4.业务层对接方式
5.请求可取消
6.网络层错误处理
网络接口规范:
- response 规范
采用两层三部分结构:
{
“retcode”:0
"retdesc":"服务器返回描述"
"data":Object
}
每个接口返回数据都封装成一个泪,其中retcode,retdesc 为基类(CFBaseResponse)的属性,如果接口中返回数据,定义一个新的返回类添加返回的数据作为该类属性且该类继承于CFBaseResponse基类。
2.request 参数规范
接口请求时需要各种参数,其中请求中每个请求都会携带的参数封装成基类(CFBaseParam)例如 loginId 和 loginToken。
对于不同的接口,每个请求参数封装成一个类,继承于CFBaseParam,同时该类实现toDictionary方法。简化网络请求中参数传递,每个接口定义各自参数类。参数类初始化采用类方法,快速赋值各个属性。
3.网络请求服务类封装
CFBaseRequest、CFBaseService、CFHTTPSessionManager、CFHTTPRequestService、CFProductService
CFProductService 工程中所有网络请求集中在该类中,该类继承于CFBaseService,每个网络请求都对应一个方法,从而快速创建请求。方法中返回值为CFBaseRequest类,参数为每个请求的参数类,同时提供一个网络完成后block回调,回调参数为每个接口返回的response类。
CFBaseRequest继承NSURLSessionDataTask,为每次创建的请求提供任务返回,改返回值可以对创建的网络请求进行暂停,取消等操作。
CFBaseService类是对网络请求类 CFHttpRequestService类调用的基本封装,可以在类中暴露一个方法同时能够差异化的调用不同的网络请求,例如加密、POST、GET等。
CFHTTPRequestService 类提供快速调用CFHTTPSessionManager网络请求接口,包括加密GET、POST 非加密GET、POST请求,同时提供设置网络请求重试机制,网络请求超时时间。
CFHTTPSessionManager 类继承于AFHTTPSessionManager类,将GET、POST、PUT、DELETE进一步封装,提供单一方法通过SWITCH调用不同类型的网络请求。
2.多环境配置
标准的APP 接口服务需要多个环境,开发,测试,正式。不同的环境对应不同的服务器地址。
引入NSURLProtocol类:NSURLProtocol是一个抽象类,提供给开发者重新定义URL加载系统的入口。
NSURLProtocol 使用场景
可拦截基于NSURLConnection或NSURLSession封装的网络请求,可以通过子类化NSURLProtocol做自定义操作。
忽略网络请求
重定向网络请求(修改request,请求地址,认证信息)
返回数据拦截,自定义Response
当URL loading system通过NSURLRequest对象进行请求时,将会自动创建NSURLProtocol的实例,从而有机会对请求进行处理。
NSURLProtocol注册,NSURLConnection和NSURLSession不同之处
NSURLConnection
在AppDelegate里面进行注册
[NSURLProtocol registerClass:[CustomURLProtocol class]];
在NSURLSession中
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.protocolClasses = @[[CustomURLProtocol class]];
故多环境配置,可以子类化NSURLProtocol类,改变网络请求来实现。
网络层数据传递
31759c2f842be8715cf19a62c698d7b3.jpg业务层对接方式
两种方式代理,Block。
请求可取消
创建请求时,返回请求Task,暴露给用户层。
网络层错误处理
对接受网络回调的数据处理,主要集中在CFHTTPRequestService中。
如果数据正常返回,通过调用
- (id)deserializeJSON:(id)json withModelClass:(Class)modelClass
该方法中会初始化返回数据类,如果后台没有返回该字段,通过该字段的属性,按默认初始化值处理。
当网络不能正常返回进入错误处理会调用
- (id)deserializeOnError:(NSError *)error withModelClass:(Class)modelClass
该方法中会处理,网络不可达, 网络超时,网络取消等行为,会封装JSON数据,向上层抛出该数据。
网友评论