随着云应用的增长,越来越多的企业尝试同时使用多个供应商。弥补服务中断的需求,使用不同服务的需求,以及基于费用选择服务的能力,都强调了对数据和应用程序可移植性的需求。应用程序编程接口是和云服务交互的关键,但是跨供应商的API区别巨大——这让移植非常困难。
本文研究了云的可移植性可能遇到的挑战,并且探讨API在其中所起的作用。
云上应用可移植性的最大问题是什么?
在所有情况下,API都是用来访问数据和服务的。没有具体的规则来定义云计算API应该如何工作或者它们应该提供什么功能。但是,当多个供应商提供相互竞争的或者类似的服务,并且使用完全不同的API去访问这些服务时,问题就出现了。
对于软件开发人员来说,这就是个噩梦。他们可能不得不重写软件以便使用某个特定服务的API,这通常导致出现软件的多个版本。在一些情况下,开发人员能够设计软件,让其检测特定的服务并且使用相应的API,但是这会让应用程序的整体大小急速膨胀,并且导致测试很复杂。不管使用上述哪种方式,为不同的云计算API创建应用程序的代价都很高,且需要花很多时间。
市场上哪些公有云计算API呢?
在公有云领域有三种常见类型的API:基础架构、服务和应用程序。
基础架构或基础架构即服务(IaaS)API意图控制低级别的资源,比如虚拟机(VM)镜像、可扩展组群和负载均衡。开发人员和IT团队使用基础架构API来预配,管理并移除公有云资源。比如,开发人员可以使用Amazon Web Services (AWS) Elastic Compute Cloud API在EC2实例里创建、移除以及使用镜像。
服务或者平台即服务API支持访问定义良好的服务或者功能,比如数据库、管理和汇报工具、消息系统、门户以及存储实例。服务API通常和基础架构即服务API协同使用,来构造出复杂的工作环境。比如,开发人员可能会使用基础架构API来预配VM,然后使用服务API将存储实例附加到VM上。
跨云API
还有跨云的API,比如Apache jclouds,允许云开发人员创建出软件,访问来自主要云供应商以及所需的其他云供应商的资源。但是,这还在开发中,因为没有清晰的规定云供应商应该提供哪些通用服务。
应用程序或者软件即服务API通常是最高层级API,提供完整的应用程序作为本地IT环境的替代品或者扩展。比如,企业可能选择使用客户关系管理软件作为托管服务而不是在本地安装。和该软件交互的工具会使用设计的API来安全地交换数据以及查询。如,想要集成Microsoft office 365功能进自己软件的企业就可以使用Microsoft Graph API。
现在有哪些可用的云计算API?
现在有大量供开发人员可用的云计算API,来创建面向用户的软件。比如,AWS提供API来操作自己的EC2和Simple Storage Service (S3,简单存储服务)服务,以及API门户服务,允许用户创建自定义API来编排一些AWS服务。其他主流公有云供应商,如Google和Microsoft Azure,也提供API将云服务链接到外部软件。
还有一些其他API可以使用来做云项目。如,私有云可能会使用类似Apache CloudStack 4.9.0.1这样的平台来支持IaaS类型的云,还能够原生支持Amazon EC2和S3 API。
API标准化
要帮助用户在任意云平台上部署应用程序——无需变更软件,越来越多的人开始对公有云供应商API的标准化感兴趣。不幸的是,我们离这样的标准化还相当遥远,特别是在主流公有云供应商之间的竞争日益白热化的情况下。
其他云计算API承诺提供更加通用、跨平台的能力。比如,Simple Cloud API是由供应商联盟推进的,它允许开发人员创建可以和多个云供应商交互的代码。
API创建有哪些通用准则?
不管你是开发自己的云计算API,还是评估待选供应商的API,以下一些通用考量可能会有所帮助。
考虑API的效率。API的实现必须简单高效。不要尝试重新创造轮子,比如SOAP、REST、JSON等这些底层技术——使用那些已经实现了的庞大的标准库。另外,不要尝试在一个API里完成所有事情。开发人员倾向于使用有限数量的语言,因此为了迎合每种主流语言都创建一个API版本,这里的主流语言包括C++、Java、 Python、PHP、Ruby、Perl、Haskell、C#、JavaScript、Node.js、OCaml 和 Delphi。
确保良好的API文档。粗糙的文档会成为采用某个供应商API的阻碍,也会阻止别人使用你的API。文档必须最新、精准并且包含一些使用示例或者教程。通过同行评审或者API用户的精准反馈来验证文档。
API必须灵活。开发人员可能会尝试以各种方式使用云计算API,因此这些API必须灵活,特别是如何处理输入和输出上。比如,灵活的API可能支持多种格式,比如JSON、YAML以及可扩展标记语言,并且不区分大小写。
注意API发布的稳定性。API变更的速度和一致性会影响到使用。开发人员使用那些不经常变化的API会更加轻松。发布周期必须计划良好,测试全面并且有完整的文档,同时让开发人员有足够的时间体验beta版本。
注意API安全性。可靠的身份验证和安全对于现代服务以及访问这些服务的云计算API来说至关重要。在大多数情况下,这包括通过API向服务传递SHA-1或者其他加密令牌。在其他情况下,通过OAuth2和SSL保证安全性。API所有者必须实现几种类型的安全。
本文作者:崔婧雯
来源:51CTO