美文网首页
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应用架构谈 开篇

    iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案iOS应用架构谈 网络层设计方案iOS应用架构...

  • iOS应用架构谈 开篇[转]

    iOS应用架构谈 开篇iOS应用架构谈 view层的组织和调用方案iOS应用架构谈 网络层设计方案iOS应用架构谈...

  • iOS应用架构

    iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用...

  • iOS应用架构谈

    iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用...

  • iOS应用架构谈 组件化方案

    iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用...

  • iOS应用架构谈(转载)

    iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用...

  • iOS 网络层设计分享

    iOS应用架构谈 网络层设计方案

  • ios资料整理

    架构 iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iO...

  • iOS应用架构谈 网络层设计方案【转载】

    原文地址 iOS应用架构谈 开篇iOS应用架构谈 view层的组织和调用方案iOS应用架构谈 网络层设计方案iOS...

  • iOS应用架构谈 网络层设计方案

    转载自:iOS应用架构谈 网络层设计方案 iOS应用架构谈 开篇iOS应用架构谈 view层的组织和调用方案iOS...

网友评论

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

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