iOS网络库-JJNetwork

2017-08-25  本文已影响17人  fef24ef7ddce

JNetwork

封装网络通信的必要性,对于一般应用封装下第三方的网络库,提供常用的POST和GET方法,然后Callback给调用者,可以满足一般的情况,但是随着业务发展,用户量的增长,给网络通信提出更多的要求,比如:改进网络通信的性能,网络通信的安全,以及网络封装的灵活性...基于这些要求所有我们有必要封装一个网络通信的模块,它的目的要解决我们常见问题,也要满足某些请求特殊性,所以我列出以下问题需要解决:

架构

JJAPIRequest

每个请求的基本单位,每个网络请求必须是继承这个对象,并实现JJRequestProtocol,才能正常工作,代码示例

网络请求的必要信息

这里是指网络请求的一些必要信息,最少是需要URL的,默认的HTTP Method是GET,其他都是可选的

缓存的策略选择

每个Request可以选择自己对应的缓存策略,由于是Protocol的设计,开发者可以根据自己的逻辑来选择,现在暂时只提供三种策略:

/**

Request support the cache feature,default will request network immediately

do not need cache.

- ReloadFromNetwork: Default mode,request from network

- ReloadFromCacheElseLoadNetwork: If have cache,will return the cache,do not request network,if not exist cache,will load origin source

- ReloadFromCacheTimeLimit: First time load request origin source,save the cache for the limit time,if expire,will load origin source and replace the old cache

*/

typedef NS_ENUM(NSUInteger,HTTPCachePolicy){

ReloadFromNetwork,

ReloadFromCacheElseLoadNetwork,

ReloadFromCacheTimeLimit,

};

最后强调一点就是JJNetwork的Cache支持POST和Get的,iOS自带的CachePolicy只支持GET,因为JJNetwork设计之初就是为接口请求设计的,所以文件上传和下载不在我们功能之内

以及后期的扩展

目前为止,只给Request基础的功能,后续在Request添加各项属性和方法来满足多变业务的需求

JJAPIService

JJAPIService是整个JJNetwork的核心和入口,网络的请求都是由这个地方发送出去的,从层次的角度来说,这里就是App的网络数据提供层,代码示例

使用方式的选择:Category or Extend

使用Extend的好处是:编译期间,可以使用自定义变量,对于开发者来说比较灵活 坏处是:侵入性太强

使用Category的好处是:运行时,按需加载,不破坏原来的结构扩展 坏处是:写自定义变量不方便(技术上做的到),方法名重复问题

在这个选择上,我选择了继承(extend)这种方式,主要是考虑开发者使用的灵活,以及不受方法名约束的问题

方法名表达具体意思

在这个地方是我要坚持的地方,当我们继承于JJAPIService,我们需要一个自定义的方法来表达我的请求是要干什么,需要传递什么参数,具体达到什么功能用方法名来体现,所以这个方式给维护者来说很明确,使用者看到这个类和方法,很快的清晰知道了Service的作用

拦截器的使用

这是JJNetwork的高级功能,有两种方式使用这个功能,使用JJAPISer

作者:jezz

链接:http://www.jianshu.com/p/9a5b4dd8378e

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇 下一篇

猜你喜欢

热点阅读