隨著云應用的增長,越來越多的企業嘗試同時使用多個供應商。彌補服務中斷的需求,使用不同服務的需求,以及基于費用選擇服務的能力,都強調了對數據和應用程序可移植性的需求。應用程序編程接口是和云服務交互的關鍵,但是跨供應商的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所有者必須實現幾種類型的安全。