关于IOS的网络请求与交互,有一个比较常用的插件就是ASI, 就象 ruby 的 RestClient 。这个工具很多常用的方法,可以解决现在的大部分需求。
不过,对于网络请求的安全机制,都是各个项目写各自的策略,没有一套完美的标准来支持各项业务,所以是时候来统一这个标准了。
在设计这套IOS安全方案之前,也有同事用到过其它的一些第三方网络请求插件,各有优劣。所以为了兼容不同的第三方插件,在设计时也要考虑这一点。
另外,关于网络安全策略,也有几套现有国际通用标准,所以除了为我们自己定制的安全策略外,也要能兼容它们,以适应和其它第三方做接口.
然后得到这套初略的设计:
BHHTTPRequestFactory 是一个工厂类,可以为各种第三方插件进行支持,以后要添加一个第三方插件,只需要增加一个工厂类和实体类。大家都遵循统一的创建方法createHttpRequest 。这个创建方法同样也遵循统一的网络请求协议,BHHTTPRequestProtocol ,这个协议可以封装我们自己的标准方法。
为了使这个方法支持适应各种标准,所以这里用了策略模式将它放在了一个策略类中:HTTPSecurity , 同样扩展也是非常方便的。
其中有几个细节要注意,ASI已经封装的很好的类了,为了不破坏其基础特性我们这里只是对它进行了继承,然后进行了各自的扩展。 但oc是不支持多重继承,所以这里用到了协议 <BHHTTPRequestProtocol >。 这样它不仅可以用ASI的特性,也可以在其上增加公司自身的安全策略。
在创建这个实体时也只是对其进行接口生成,而不针对具体类,所以就解决了在<BHHTTPRequestFactoryProtocol >创建的实体到底是哪个具体类的情况,不用依赖的这么紧密。
这是实用的一例:
BHASIRequestFactory *requestF = [[BHASIRequestFactory alloc] init];
id request = [requestF createHttpRequest];
[request createSecurity]; // 创建安全策略
[request buildSecurityParams]; // 完成安全加密等任务
以上只是个人的一点拙见!