优秀的网络框架必须具备适应需求变化的灵活性,且能优雅的处理不断变化的网络情况,同时保存可维护性和可伸缩性。
iOS 网络框架由4层组成:
网络框架设计:
网络框架整体架构从三方面考虑:
1)远程门面模式
远程门面模式可以简化应用集成,方便多个客户端共享相同的业务逻辑。由于门面模式抽象了框架底层逻辑的复杂性,所以,只要门面的外部API契约保持不变,框架本身内部的变化,升级,或者完全异常就不会对外贸使用的客户端造成任何影响。
门面模式原理图:
2)服务版本化
服务版本化可以做到更新与应用端的API契约的同时,依然可以保持对之前版本的支持。 任何框架都可能会经常更新和修复BUG,在新的框架版本发布后,我们无法保证每个用户在第一时间就进行修复升级,所以,在相当长的一段时间内,保持多个支持的版本是必要的。
3)服务定位器(端点探测)
服务定位器的核心是一个包含了API端点和一些有关端点的简要元数据的文件, 如json、plist文件等。元数据可以确定API版本号,设备类型,安全级别等。当然,还包括端点的URL以及其对应的键。服务定位器一般是静态文件,所以通常部署在CDN服务器上。服务定位器的源必须非常可靠,因为它是单点请求,一旦失败,后面的请求可能无法正常进行。具体实践过程中,一般是框架内部预先存储一个默认的服务定位器文件,避免出现异常时,无法使用。另外,一旦发现有新的文件版本,就请求新文件并更新本地默认文件。服务定位器尽量保持负载平衡,避免全部请求发送到同一台服务器。复杂的应用可能需要专门的网络管理器也处理服务定位器的加载。
总结:
灵活的网络框架应该在第一个版本就经过精心的规划和实现,这样才能获得最大的收益。如果采用了硬编码端点或者其它业务逻辑,当业务发生重大变化时,我们将对老版本程序束手无策。 如果通过远程门面,服务版本化,服务定位器进行设计框架,那么后续的新特性增加就无须破坏之前应用版本。