WebService 是iOS网络应用的根本所在,灵活性和健壮性会对用户的体验产生极大的影响。设计良好的服务API可以适应变化的后端数据源,同时为依赖他的应用提供不变的门面。服务定位器可以使应用能够动态探测到新的服务端点并使用他们,从而无须重新编译并重新向AppStore重新提交应用。如果必须提交,一般是大规模的改动,属于整个应用生命周期的一部分。不妨碍新版本怎增加新的特性,那么支持版本化的服务API就显得尤为重要。
一、远程门面模式
远程门面可以简化应用集成,并且可以让多个客户端共享相当的应用逻辑。比如,邮政系统,包括大量的邮递员、卡车、飞机、配送中心和邮局,然而用户所需的大多数数任务都将这种复杂性隐藏起来,只包含邮寄信件与接收包裹。用户只需要单独的知道如何寄邮件就可以了,并不需要知道是怎么寄过去的。类似,API也可以将多个数据库查询或是后端系统请求抽象对象为一个单独的外部访问方法,只要门面的的外部API契约保持不变,底层系统可以随便变化、升级而不给门面的客户端造成影响。
假如有家银行与竞争对手合并了,该银行的现有的账户迁移到竞争对手的账户存储系统中。合并数据之后,远程门面可以切换新的数据源,转换与API契约不匹配的任何数据,然后返回给应用,用户并不知道后面发生了什么事情。契约编程,他能保证网络会话的两端遵循之前达成一致的输入和输出契约。只要契约依然有效,那么后端系统无论是重写还是移植都不会给另一端发生影响。
二、服务版本化
门面需要将所有可能的客户端应用版本组合到兼容性桶当中,然后为每个桶分配正确的API版本供其使用。为了简化未来的开发,请求高于门面所知道的最大版本号的客户端版本选择好的默认值,通常是最近用的API版本。
三、服务定位器
服务定位器是一个帮助应用动态探测远程源API端点的工具,它可以解决应用硬编码的无效或不存在的端点问题。开发者还可以通过服务定位器将之前发布的应用重新制定可用的新服务。
实现了服务定位器模式的任何客户端的第一个动作通常都是加载并解析文件。由于所有的网络调用都需要端点,而端点只位于文件中,因此在任何其它的网络动作发生之前必须要解析该文件。当应用返回到前台以确保端点和数据最新时,定位器文件也应该进行更新。应用可以停留在后台状态中一段时间,他之前可能加载了一个服务定位器文件。通常情况下,当服务定位器加载时,应用会显示启动画面。从而不影响用户体验。
总结:
灵活的服务架构需要在应用的第一个版本发布之前经过精心的规划与实现,这样能获得最大的收益。如果某个版本采用了硬编码的端点或者业务逻辑,那么可以有效的支持该配置,即便业务发生了巨大变化也是如此。通过远程门面、API版本化与服务定位器的融合,可以从用多种方式来改变已发布应用的业务逻辑与API设置。现在,产品代码做细微的修改,以及在新版本中增加主要的新特性而无须破坏之前的应用版本已经变的很容易了。之前的服务器基础设施的开发代价来也能没有必要,不过随着应用的逐渐变大,就会带来收益。