美文网首页
IOS 网络层架构设计思路

IOS 网络层架构设计思路

作者: TaoGeNet | 来源:发表于2017-09-27 14:50 被阅读225次

    针对以下几点介绍:

    1.网络接口规范
    2.多环境配置
    3.网络层数据传递
    4.业务层对接方式
    5.请求可取消
    6.网络层错误处理

    网络接口规范:

    1. 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数据,向上层抛出该数据。

    相关文章

      网友评论

          本文标题:IOS 网络层架构设计思路

          本文链接:https://www.haomeiwen.com/subject/juheextx.html