网络请求

2017-10-30  本文已影响40人  Carden

YTKNetworkConfig的功能使用方法?

1、配置所有网络请求的主机地址和CDN地址2、与url过滤类一起来统一对所有的url进行更改 3、本质是一个单例类,所以直接实例化对象,设置对象的baseUrl和cdnUrl属性

网络请求类YTKRequest?

这相当于我们的BaseRequest,以后每一个网络请求对象都将继承于它,一个网络请求一个对象。使用就是通过覆盖父类的方法来建立特定的网络请求对象,主要就是覆盖requestUrl、requestMethod、requestArgument等方法,需要特别注意的是因为详细网址已经设置在YTKNetworkConfig类的baseUrl属性里,因此这里的requestUrl就不用再写服务器的主机地址了。请求数据之前先判断已有的JSON数据是否无效的属性:jsonValidator检查网络请求到的JSON与已有的JSON是否一致:statusCodeValidator属性如果我们要POST文件就需要用到属性:constructingBodyBlock

什么叫支持文件的断点续传?

如何打破Block回调中的循环引用在block里直接用self?

就是在网络请求结束之后,调用将Block置空的方法来防止循环引用,这样就可以少些很多的typeof self weafSelf;使用方法?pod ‘YTKNetwork’。将每一个网络请求都封装成对象,每一个请求都需要继承YTKRequest类,通过覆盖父类的一些方法来构造制定的网络请求。就是在网络请求结束之后,调用将Block置空的方法来防止循环引用,这样就可以少些很多的__weak typeof (self) weafSelf = self;

网络封装的适用场景?

1、需要缓存2、网络请求之间存在依赖,即B网络请求是否开始与A网络请求的结果直接相关3、依赖特定的版本号来判断缓存的内容已过期4、不仅可以实现Block回调,更是可以通过设置delegate属性等于self,同时调用start方法进行委托回调。按时间缓存网络请求内容?意思是说按一定的时间规律来进行缓存还是说超过了一定时间后已经缓存的内容失效,其实两者并不矛盾,正是因为缓存的内容在一段时间之后失效,所以需要重新请求数据,进行缓存。什么叫按版本号缓存网络请求地址?网络请求中统一设置CDN地址,什么是CDN地址?全称content delivery Network,内容分发网络。通过在网络各处放置节点服务器实现在现有的服务器基础上补充一层智能虚拟网络,智能引导用户到最近的服务器上,是内容传输的更快、更稳定。相互依赖的网络请求的发送?就是一个网络请求的启动开关取决于另一个网络请求的请求结果。

为什么要验证JSON的合法性?

因为从服务器获得的JSON数据不一定总是可信赖的,如果数据是从有故障的服务器返回了一个错误的格式,就非常容易造成客户端崩溃。就加入说正常情况下,我们登录个人中心,返回的昵称总是字符串,用户年龄都是数字,可是假如返回的文件格式出现问题,那么客户端必崩无疑。所以验证的方法就是重写父类基础网络请求YTKRequest类的- (id)jsonValidator方法。返回的是一个字典,这个字典里面的键就是字符串形参,键值对的值就是【NSString class】。

在YTKNetworkConfig的对象里同时设置了baseUrl和cdnUrl属性?

1、默认使用baseUrl2、如果想要使用cdnUrl,就必须重写基础网络请求YTKRequest类的-(BOOL)useCDN方法并返回YES

实现断点续传下载?

重写基础网络请求YTKRequest类的resumableDownloadPath方法,直接返回一个文件路径字符串。这里面就涉及到库路径Lib Path。

缓存路径cachePath如何实现缓存数据的存取?

首先就是通过重写基础网络请求YTKRequest类的- (NSInteger的)cacheTimeInSeconds方法设定高速缓存数据的有效秒数,如果缓存的数据没有到期,在缓存期内调用start方法或是startWithCompletionBlockWithSuccess方法时实际上并不会发送真正的请求,而是直接返回当初高速缓存的数据,只有在缓存过期时,才会真正地发送网络请求。

高级用法

批量编辑网络请求路径?

首先分析url参数过滤的类的实现原理,其实本质就是通过一个全新的自定义类来整合基础的url和新增的参数字典,然后介绍url参数过滤的类的使用方法。1、新建一个url参数过滤的类,这个类的.h方法里面有一个协议,协议里面主要实现了两个方法,第一个方法输入参数是一个字典,返回一个自定义类的对象;第二个方法就是输入参数一为原始url的字符串,参数二为基础网络请求类的对象,返回参数是一个全新的url字符串。2、.m方法里面首先包括一个名为参数arguments的全局变量字典。前面说过返回的参数为url参数过滤的类的对象本身,恰好这个url参数过滤的类的对象的初始化就需要传入argument字典。让我奇怪的是为什么是url参数过滤的类生成类时的self对象来调用alloc来开辟内存空间。而且又返回一个url参数过滤的类的对象,好奇怪。3、在输入原始url和增加的request两个参数之后返回一个全新的url字符串。这里面务必注意这里是通过网络请求私有类来调用一个方法拼接原始的url和新增的参数字典,最后返回一个字符串,反而当初传进来的request网络请求类对象并没有使用。

举例现在要把客户端的版本号添加到所有的网络请求url之中?

其实就是在设置根控制器为可见的方法里使用两个类来实现网络参数的统一添加,所有的url都变成全新的url,当务之急还是先通过url参数过滤的类调用类方法传入参数实例化一个url参数过滤的类的对象。然后再通过网络配置这个单例类对象调用添加url参数过滤的类的对象的方法,其目的就是将添加后的参数推广到所有网络请求url。

同一时间发送批量的网络请求并统一处理同时请求成功时的回调?

1、实例化4个Api对象2、把这4个对象以数组的元素的形式传入初始化YTKBatchRequest对象的数组形参里3、YTKBatchRequest对象调用startWithCompletionBlockWithSuccess方法4、在4个Api对象全部请求成功的Block回调里实例化一个临时数组并赋值为YTKBatchRequest对象的requestArray属性5、再各自使用4个Api类实例四个Api对象,一一对应requestArray的每一个元素,但然需要强转6、现在就跟一个Api请求成功获得的request没有什么区别了。

加载缓存数据的高级用法?

由于加载慢,所以先调用方法[api cacheJson]显示上次缓存的内容,加载成功后,再用最新的内容替换上次的内容,如是断网状态也先显示上次缓存中的内容。当初不是还需要Api先来判断缓存的数据是否在有效时间内,然后再决定是否是真的请求数据。而现在就是直接调用- (id)cacheJson方法获得上次缓存的内容。前提必须重写父类设定缓存有效时间的方法- (NSInteger)cacheTimeInSeconds返回一个大于0的值,这样才能开启基础网络请求类的缓存功能。因为默认情况下缓存数据的有效时间为0秒。

上传文件获得一个访问文件的Api?

关键就是重写基础网络请求类的- (AFConstructingBlock)constructingBodyBlock方法,在这个方法里直return一个Block代码块,返回参数为void直接忽略没写,输入参数为一个满足协议的formData值,数据类型自然不确定是id啦。这就相当于直接return一个NSString *tempString = @“”,只不过这里的tempString是一个^(idformData)输入参数为fromData的Block,而且这个地方直接给Block赋值了,真的是既声明又赋值。赋值的代码里面首先就是压缩图片成NSData数据。最后通过formData调用appendPartWithFileData方法正式上传图片。尤其注意这里需要传入三个参数,其一是文件的二进制数据,其二是文件名字,其三是文件夹的名字,其四很关键,需要传入文件类型,图片通常都是image/jpeg。另外文件名字和文件夹的名字可以相同,而且通常来说就是image。

统一设置网络请求Api的请求头HeaderField?

重写覆盖基础网络请求类的-(NSDictionnary*)requestHeaderFieldValueDictionary方法返回一个请求头的键值对的字典。务必注意,请求头字典的键和值都必须是NSString类型。

定制自定义的网络请求类对象?

重写最最基础网络请求YTKBaseRequest类的- (NSURLRequest *)buildCustomUrlRequest

方法,返回一个基础网络请求类的对象。尤其注意的是,只要返回的基础网络请求类的对象非nil不为空,那么会忽略其它一切自定义request的方法。

按时间缓存网络请求内容?

意思是说按一定的时间规律来进行缓存还是说超过了一定时间后已经缓存的内容失效,其实两者并不矛盾,正是因为缓存的内容在一段时间之后失效,所以需要重新请求数据,进行缓存。

按版本号缓存网络请求地址?

网络请求中统一设置CDN地址,什么是CDN地址?

全称content delivery Network,内容分发网络。通过在网络各处放置节点服务器实现在现有的服务器基础上补充一层智能虚拟网络,智能引导用户到最近的服务器上,是内容传输的更快、更稳定。

相互依赖的网络请求的发送?

就是一个网络请求的启动开关取决于另一个网络请求的请求结果。

一次性对所有的网络请求路径进行更改?

首先分析url参数过滤的类的实现原理,其实本质就是通过一个全新的自定义类来整合基础的url和新增的参数字典,然后介绍url参数过滤的类的使用方法。

1、新建一个url参数过滤的类,这个类的.h方法里面有一个协议,协议里面主要实现了两个方法,第一个方法输入参数是一个字典,返回一个自定义类的对象;第二个方法就是输入参数一为原始url的字符串,参数二为基础网络请求类的对象,返回参数是一个全新的url字符串。

2、.m方法里面首先包括一个名为参数arguments的全局变量字典。前面说过返回的参数为url参数过滤的类的对象本身,恰好这个url参数过滤的类的对象的初始化就需要传入argument字典。让我奇怪的是为什么是url参数过滤的类生成类时的self对象来调用alloc来开辟内存空间。而且又返回一个url参数过滤的类的对象,好奇怪。

3、在输入原始url和增加的request两个参数之后返回一个全新的url字符串。这里面务必注意这里是通过网络请求私有类来调用一个方法拼接原始的url和新增的参数字典,最后返回一个字符串,反而当初传进来的request网络请求类对象并没有使用。

上一篇下一篇

猜你喜欢

热点阅读