改造YTKNetWork(迁移到AF3.0)

YTKNetWork是什么?

YTKNetwork 是猿题库 iOS 研发团队基于 AFNetworking 封装的 iOS 网络库,其实现了一套 High Level 的 API,提供了更高层次的网络访问抽象。YTKNetwork 现在同时被使用在猿题库公司的所有产品的 iOS 端,包括:猿题库、 小猿搜题、 猿辅导 、粉笔直播课 。

YTKNetWork的一些特性

YTKNetwork 的基本的思想是把每一个网络请求封装成对象。所以使用 YTKNetwork,你的每一个请求都需要继承YTKRequest类,通过覆盖父类的一些方法来构造指定的网络请求。

把每一个网络请求封装成对象其实是使用了设计模式中的 Command 模式,它有以下好处:

  • 将网络请求与具体的第三方库依赖隔离,方便以后更换底层的网络库。
  • 方便在基类中处理公共逻辑,例如猿题库的数据版本号信息就统一在基类中处理。
  • 方便在基类中处理缓存逻辑,以及其它一些公共逻辑。
  • 方便做对象的持久化。

为什么要对YTKNetWork进行改造

YTKNetWork其实是对AF的二次封装,他加入了缓存,验证,批量请求等功能。但是为了兼容ios 6,YTKNetWork还是基于AF 2.X的。如今AF3.0已经出来很久了,版本也到了3.1x,原来的2.x版本对ios8,9已经有些乏力,会偶尔出现闪退。并且AF 3.0基于URlSession,请求速度会更快,对服务器的负担也减轻,迁移势在必行。

改造的原理

  • 首先要弄清AF从2.0到3.0的变化,详情可以参考这篇迁移指南:AFNetworking 3.0迁移指南

  • 我们可以看出主要的变化是取消了NSURLConnection,取而代之的是NSURLSession。之前基于NSURLConnection的请求,AF自己封装了AFURLConnectionOperation,但是AF3.0,AF并没有对NSURLSessionDataTask去做封装。在AF2.x中,封装的Operation中是包含response的,一个operation对应一个response。但是现在AF3.0没有这样去封装,这里是改造的一大难点。YTKAF对于AF进行了再次封装,他将Request和response通过Operation绑定了起来,所有的请求基于YTKBaseRequest:

改造YTKNetWork(迁移到AF3.0)_第1张图片
  • 接下来就是对这五个属性的改造,改造前:
改造YTKNetWork(迁移到AF3.0)_第2张图片

可以看出都是基于operation去获取response的。现在我们没有了operation怎么办呢,我的解决方案是在回调的时候,把response赋值给自己的YTKBaseRequest的response属性,在YTKNetworkAgent中改造:

改造YTKNetWork(迁移到AF3.0)_第3张图片
  • 于是这五个属性改造后变为:
改造YTKNetWork(迁移到AF3.0)_第4张图片

responseData不需要get方法了,直接从NSDataTask的回调中获取到。

改造后续

做完这些后,其他的工作主要是对YTKNetworkAgent中的AFURLConnectionOperation都替换成NSURLSessionDataTask,然后一些AF老的API替换成最新的基于NSURLSession的就行了。详情的话可以下载我的代码看下面是github传送门:(https://github.com/cvby/LZNetworking) (如果可以话给我打个星哦)

感谢&参考

YTKNetworking:https://github.com/yuantiku/YTKNetwork
AFNetworking:https://github.com/AFNetworking/AFNetworking

你可能感兴趣的:(改造YTKNetWork(迁移到AF3.0))