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

一.网络层跟业务对接部分的设计

二.网络层的安全机制实现

三.网络层的优化方案

一.网络层跟业务对接部分的设计

1.使用哪种交互模式来跟业务层做对接?

2.是否有必要将API返回的数据封装成对象然后再交付给业务层?

3.使用集约化调用方式还是离散型调用方式去调用API?

1.使用哪种交互模式来跟业务层做对接?

(1) 以什么方式将数据交付给业务层?

(2) 交付什么样的数据给业务层?


(1) 以什么方式将数据交付给业务层

大多数App在网络层所采用的方案主要集中于三种:

Delegate

Notification

Block

(KVO,Target-Action很少使用)

Delegate为主,Notification为辅

尽可能减少跨曾数据交流的可能

统一回调方法,便于调试和维护

在跟业务层对接的部分只采用一种对接手段(可只采用Delegate)限制灵活性,以此来交换应用的可维护性

跨层数据交流,会导致代码混乱,破坏模块的封装性

Notification  — —不同工程师起不同名字,不便于维护

notificationdelegate的选择:

    notification:一对多时

    delegate:避免跨层范文,限制相应代码的形式)

Block — — 很难追踪,难以维护;延长相关对象的生命周期,使得内部所有的对象引用计数加一,不能及时回收

blockdelegate的选择:

    delegate:当回调之后要做的任务在每次回调时都一致;

    Block:在回调之后要做的任务在每次回调时无法保持一致)

尽可能通过Delegate的回调方式交付数据,这样可以避免不必要的跨层访问。当出现跨层访问的需求时(比如信号类型切换),通过Notification的方式交付数据。正常情况下应该是避免使用Block

(2) 交付什么样的数据给业务层

将数据转变成对象交付成本很大:

1.数组内容的转化成本较高:数组里面每项都要都要转化成item对象,

2.转化之后的数据在大部分情况是不能直接被展示的,为了能够被展示,还需要第二次转化。

3.只有在API返回的数据高度标准化时,致谢对象原型的可复用成都才高,否则容易出现类型爆炸,提高维护成本。

4.调试时通过对象原型查看数据内容不如直接通过NSDictionary/NSArray直观。

5.同一API的数据被不同View展示时,难以控制数据转化的代码,他们有可能会散落在任何需要的地方。

对于业务层而言,由Controller根据ViewAPIManager之间的关系,选择合适的reformerVIew可以直接使用的数据(甚至reformer可以用来直接生成view)转化好之后交付给View。对于网络层而言,只需要保持住原始数据即可,不需要主动转化成数据原型。然后数据采用NSDictionaryConst字符串key来表征,避免了使用对象来表征带来的迁移困难,同时不失去可读性。

集约型API调用方式和离散型API调用方式的选择?

对外提供一个BaseAPIManager来给业务方做派生,在BaseManager里面采用集约化的手段组装请求,然而也无妨调用API的时候,则是以离散的API调用方式来调用。如果你的App只提供了集约化的方式,而没有离散方式的同道,那么我建议再封装一层,便于业务方使用离散的API调用方式来放飞请求。

使用delegate来做数据对接,仅在必要时采用Notification来做跨层访问

交付NSDictionary给业务层,使用Const字符串作为Key来保持可读性

提供reformer机制来处理网络层反馈的数据,这个机制很重要,好处极多

网络层上部分使用离散型设计,下部分使用集约型设计

设计合理的继承机制,让派生出来的APIManager受到限制,避免混乱

二.网络层的安全机制

1.判断API的调用请求是否来自于经过授权的APP

  确保API的调用者是来自你自己的APP,防止竞争对手爬你的API

  如果你对外提供了需要注册才能使用的API平台,那么你需要有这个机制来识别是否是注册用户调用了你的API

解决方案:设计签名

2.保证传输数据的安全

  防止中间人共计,比如说运营商给你很喜欢往用户的Http请求里面塞广告

  SPDY依赖于HTTPS,而且是未来HTTP/2的基础,他们能够提高你APP在网络层整体的而性能

解决方案:HTTPS

三.网络层的优化方案

1.针对链接建立环节的优化

2.针对链接传输数据量的优化

3.针对链接复用的优化

1.针对链接建立环节的优化

  (1)发起请求

  (2)DNS域名解析得到IP

  (3)根据IP进行三次(HTTPS四次)握手,链接建立成功

(1)针对发起请求的优化手段

要解决的问题就是网络层该不该为此API调用发起请求

(一)使用缓存手段减少请求的发起次数

一般把API名字和参数拼成字符串取MD5作为key存储对应返回的数据。

什么时候清理缓存:根据超时时间限制进行清理

      根据缓存数据大小清理

(二)使用策略来减少请求的发起次数

针对重复请求的发起和取消:下拉刷新时,在请求着陆之前,后面的重复操作可不白发送。条件筛选时,取消前面已经发送的请求。

用户操作日志的请求策略:本地记录用户的操作记录,当记录满30跳的时候发起一次请求。

  (2&3)针对DNS域名解析做的优化,以及建立连接的优化

解决方案:本地有一份IP列表,这些IP是所有提供API的服务器的IP,每次应用启动的时候,针对这个列表里的所有IP取ping延时时间,然后取延时时间最小的那个IP作为今后发起请求的IP地址。应用启动的时候获得本地列表中所有IP的ping值,然后通过NSURLProtocol的手段将URL中的HOST修改为我们找到的最快的IP。另外,这个本地IP列表也会需要通过一个API来维护,一般是每天第一次启动的时候读一次API,然后更新到本地。

2.针对链接传输数据量的优化

解决方案:压缩

3.针对链接复用的优化

解决方案:SPDY自带链接复用以及数据压缩的功能,所以服务端支持SPDY的时候,App直接挂SPDY就可以了。如果服务端不支持SPDY,也可以使用PipeLine,苹果原生自带这个功能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 快乐的一天 作者:冯博宇 雅号:鸭梨 年级:三年级 周一的中午,学校召开钓鱼大赛...
    化作彼岸花阅读 185评论 0 0
  • 换位思考应该用于我们的日常生活和工作当中,尤其是在服务于客人的过程中尤为重要,往往能发现客人的深度需求,这样对客人...
    peter_621f阅读 199评论 0 1
  • 儿子去参加英语培训,主要是演讲方面。 我问,最近学了什么内容? 他说,学习写演讲稿。 我说,演讲需要的是多练。但是...
    写作的技巧阅读 244评论 0 1
  • 创造
    开心和尚阅读 218评论 0 0