iOS开源网络库YTKNetwork

作者: 52xpz | 来源:发表于2016-06-17 16:56 被阅读2659次

    iOS中基于http协议上传下载一般用大名鼎鼎的网络库AFNetworking,一般在项目中还会对此库进行二次封装,本片文章将介绍唐巧团队开源的基于AFNetworking二次封装的开源库YTKNetworkGitHub - AFNetworking/AFNetworking: A delightful networking framework for iOS

    注:本文解析是基于YTKNetwork1.x版本,目前YTKNetwork已经更新到了2.x版本,具体的区别见YTKNetwork 2.0 迁移指南

    一、YTKNetwork提供的功能

    YTKNetwork除了具备AFNetworking所有功能外,还提供如下高级功能:

    1、支持按时间缓存网络请求内容

    2、支持按版本号缓存网络请求内容

    3、支持统一设置服务器和 CDN 的地址

    4、支持检查返回 JSON 内容的合法性

    5、支持文件的断点续传

    6、支持 block 和 delegate 两种模式的回调方式

    7、支持批量的网络请求发送,并统一设置它们的回调(实现在YTKBatchRequest类中)

    8、支持方便地设置有相互依赖的网络请求的发送,例如:发送请求A,根据请求A的结果,选择性的发送请求B和C,再根据B和C的结果,选择性的发送请求D。(实现在YTKChainRequest类中)

    9、支持网络请求 URL 的 filter,可以统一为网络请求加上一些参数,或者修改一些路径。

    10、定义了一套插件机制,可以很方便地为 YTKNetwork 增加功能。猿题库官方现在提供了一个插件,可以在某些网络请求发起时,在界面上显示"正在加载"的 HUD。

    具体的使用可以见YTKNetwork github官网,下面着重讲解一下YTKNetwork的架构

    二、YTKNetwork原理

    1、架构图如下:

    2、相关类介绍

    1)YTKBaseRequest:网络请求基类,通过成员变量requestOperation发起http请求

    2)YTKRequest:单个网络请求类,项目中的网络请求直接继承该类。该类继承于YTKBaseRequest,通过调用YTKNetworkAgent全局单例对象方法- (void)addRequest:(YTKBaseRequest *)request发起网络请求

    3)YTKBatchRequest:批量网络请求类,通过此类来实现批量发送请求

    4)YTKBatchRequestAgent:管理YTKBatchRequest对象类,该类在实现上是一个全局单例对象

    5)YTKChainRequest:串行网络请求类,通过该类来实现有依赖关系的网络请求

    6)YTKChainRequestAgent:管理YTKChainRequest对象类,该类在实现上是一个全局单例对象

    7)YTKNetworkAgent:网络代理类,该类实际上是一个胶水层,YTKRequest通过方法addRequest管理YTKRequest对象,并且通过AFHTTPRequestOperationManager把YTKRequest代表的url请求路由到AFNetworking里面

    由于YTKNetwork基于AFNetworking来实现的,顺便介绍一下AFNetworking相关的类,按功能来说明:

    网络请求类:

    1)AFURLConnectionOperation:实际发起网络请求与处理网络相应数据的类。该类继承于NSOperation,并且实现了协议NSURLConnectionDelegate、NSURLConnectionDataDelegate、NSSecureCoding、NSCopying

    2)AFHTTPRequestOperation:继承于AFURLConnectionOperation,AFHTTPRequestOperationManager调用

    序列化与反序列化类

    1)AFHTTPRequestSerializer:http请求参数序列化为标准http参数类。该类通过实现协议AFURLRequestSerialization来实现序列化

    2)AFJSONRequestSerializer:http请求参数序列化为JSON格式类。继承于AFHTTPRequestSerializer

    3)AFPropertyListRequestSerializer:请求参数序列化成application/x-plist格式类。继承于AFHTTPRequestSerializer:http

    4)AFHTTPResponseSerializer:响应数据反序列化类,该类通过实现AFURLResponseSerialization协议来实现反序列化

    5)AFJSONRequestSerializer:响应数据反序列化为JSON格式类。

    6)AFXMLParserResponseSerializer:响应数据反序列化为XML格式类

    7)AFPropertyListResponseSerializer:响应数据反序列化为property list格式类

    8)AFImageResponseSerializer:响应数据反序列化为UIImage格式类

    9)AFCompoundResponseSerializer:暂时不清楚用法

    AFHTTPRequestOperationManager:直接给业务层使用的类。业务直接通过该类的Head、Post、Get方法创建请求。该类的

    AFHTTPSessionManager:直接给业务层使用的类.通过NSURLSession来实现网络请求

    其他类:UIKit目录下的扩展类,可以拿来从网络上加载图片,比如UIImageView+AFNetworking扩展

    相关文章

      网友评论

        本文标题:iOS开源网络库YTKNetwork

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