開發(fā)云API連接器的最佳實踐
譯文【51CTO.com快譯】
各家云服務提供商,例如亞馬遜Web Services、微軟Azure、谷歌Compute Engine等,及其OpenStack平臺、vCloud、OnApp等都越來越多地實現(xiàn)了通過APIs或web services的可編程服務。為了調(diào)用這些APIs和web services,我們必然需要開發(fā)出一個連接器(connector)?,F(xiàn)如今,我們已經(jīng)積累了對幾乎所有的云平臺或服務進行API連接器的開發(fā)經(jīng)驗。本博文旨在分享我們的經(jīng)驗,并提供一些開發(fā)web service連接器用以連接到云服務或平臺所需要遵循的***實踐。
為什么需要API連接器
如下是要用到API連接器的幾個原因:
1.發(fā)現(xiàn)云資源
2.管理資源
3.自動化操作
4.協(xié)調(diào)資源
5.與工具和產(chǎn)品集成
6.報告總結資源及其利用
開發(fā)API連接器的步驟
下面是針對云平臺/服務開發(fā)出高效和實用的連接器所需的步驟順序:
1.理解API特性
2.分析云平臺/服務所提供的API支持
3.識別API的各種操作
4.驗證API的各個端點
5.驗證API的授權
6.檢查配額
7.分析云資源的定價
8.設計考慮API連接器
API特性
API的特性包括API的類型、認證機制和請求/響應的類型。
API類型
通常情況下,APIs是通過REST(即,表述性狀態(tài)傳遞 Representational State Transfer)或SOAP(即,簡單對象訪問協(xié)議 Simple Object Access Protocol)發(fā)布的。其中,REST正在成為標準,并取代舊的SOAP APIs。這一點可以通過文末表格中的數(shù)據(jù)予以充分證明。
API認證
每個云平臺都使用不同類型的認證機制來訪問APIs,因此理解這些認證機制是非常重要的。一些典型的例子會包括如下部分:
·基本認證
·基于令牌的認證
·SSL認證
·多因素認證
基本認證
基本認證使用的是以base64編碼的用戶名和密碼的經(jīng)典組合,并在HTTP頭部的授權中提供。
例子: Authorization:Base64(username:password)
請求:
Headers: Content-type: application/xml
Authorization: Basic dG9ib3RyYXM6cTE=
Method: GET
API: http://api.xyzcloud.com:4465/paci/v1.0/ve
IPaddress | host - api.xyzcloud.com
PortNo – 4465
Path – paci/v1.0/ve
響應:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ve-list>
<ve-info subscription-id='100001' name='web' state='created' description='Web Server'/>
</ve-list>
基于令牌的認證(X-Auth-Token,Oauth令牌)
基于令牌的認證提供了使用包含用戶身份信息的臨時令牌來進行認證。當臨時令牌到期的時候,它需要被資源進行刷新。內(nèi)部認證處理器基于頭部所提供的令牌信息進行驗證。
Request:
Headers: Content-type : application/json
Method: POST
API: https://api.myapplication.com/user/accessToken
內(nèi)容:
{
userName:'my username',
password:'my password',
token_type:'mac'
}
響應:
{
“access_token”: “okKXxMWOEhnM78Rie02ZjWjP7eQqpp6V”,
“mac_key”:”vV6xEfVgQZv4ABJ6VZDHlQfCaqKgFZuN”,
“mac_algorithm”:”hmac-sha-1”,
“token-type”:”mac”,
“expires_in”:3600,
“refresh_token”:”nZSiH3L5K4febMlELguILucrWpjRud56”
}
SSL認證
安全套接字層是一種標準的安全技術,它在服務器和客戶機,典型場景是web服務器(網(wǎng)站)與瀏覽器之間建立了一個加密的連接。SSL認證需要將SSL證書上載到訂閱它的平臺之上。而API的端點則需要通過SSL證書來進行身份認證。
多因素認證
多因素認證(Multi-factor authentication MFA)在用戶名和密碼之上增加了一層保護。支持MFA的APIs需要把用戶名和密碼作為***因素;而把從MFA設備上獲取的認證代碼作為第二個因素。這些多因素為API的端點提供了更高的安全性。
API響應類型
在提供輸入和使用輸出的時候,請求和響應類型的API需要被進行查看。API的請求和響應都是XML或JSON類型的,因此連接器需要根據(jù)它的接口需求來轉換其相應的響應。
API的支持
可以通過以下選項來開發(fā)云平臺/服務的API連接器。
·使用你所選用的編程語言,例如:Python、Java、.Net、Ruby、GO、Node.JS等來直接調(diào)用REST和SOAP的API。
·一些云平臺/服務提供各種針對API的軟件開發(fā)工具包(SDKs),以方便開發(fā)人員使用由平臺/服務所提供的可編程的SDKs,例如特定的Python、Java、.Net、Ruby等
·使用第三方的庫,例如基于他們支持的LibCloud(Python)、Fog (Ruby)、jCloud (Java)、Libretto (JavaScript)、pkgcloud (Node.JS)或是gophercloud (GO)。
下表顯示了一些針對各大領先的云服務提供商和平臺的API支持。
注意:這些云服務API的細節(jié)可以在谷歌表格(Google Sheets)中找到。而且它鼓勵服務提供商和其他的讀者去更新他們自己的各種云API端點,從而為開發(fā)人員的提供更為方便的參考。
API的各種操作
通過瀏覽API文檔以識別你想要調(diào)用的操作,這樣有助于你去了解本平臺所支持的各種API操作。在開始通過API進行調(diào)用之前,你***是通過管理門戶網(wǎng)站或是儀表盤界面來執(zhí)行各種操作,以便你能夠了解它是如何工作的。要調(diào)用API,你首先要做的是認證,然后在執(zhí)行各種創(chuàng)建選項之前,你可以嘗試一些基本的讀取操作。
驗證API的各個端點
API端點與云平臺管理的URL并不相同。一個API端點通常包括主機、端口和路徑。如果是REST API的話,它會包括一個訪問的密鑰和一個私鑰??梢赃\用諸如POSTMAN、RESTClient等工具來為平臺或服務驗證API各個端點的可訪問性。而對于一個基于令牌的認證,我們則需要生成令牌,并將該令牌提供給RESTClient。
API的授權
在對API進行認證之后,我們需要了解云平臺或服務中的給定用戶的授權問題。例如,通過使用AWS身份和訪問管理(Identity and Access Management IAM),我們可能在成功認證之后,也只能執(zhí)行那些被IAM所授權給我們的操作。
配額
云平臺/服務對于可由用戶帳戶調(diào)用的資源實施配額管理。因此你***是事先了解一下配額限制的機制。例如,AWS對單個賬戶的彈性IP地址(elastic IP)的分配就限制為5個。但是,這是可以通過提出請求來進行增加的。而OpenStack的管理員則可以在用戶使用的每個項目中定義資源的限制。
分析云資源的定價
檢查云服務提供商的資源定價是非常重要的。由于云服務提供商是按每月、每小時或每分鐘進行收費的,因此在消費前了解定價是很重要的,否則我們在收到賬單時肯定會有所“驚喜”的。同樣重要的是要詳細了解服務提供商所能提供的免費層級,這也會讓我們避免那些所謂的“驚喜”。
設計考慮API連接器的開發(fā)
•如果你只為單個平臺開發(fā)一個連接器的話,使用該平臺所提供的SDKs乃是理想選擇。
•如果平臺并不提供所需語言的SDK,你可以用到諸如APIMatic、AWS API Gateway等工具,它們能夠為API端點生成各種SDKs。在連接器的開發(fā)過程中,使用SDKs將會減少許多開發(fā)的工作量。
•如果你想開發(fā)跨多個云的連接器,你可以考慮使用第三方的SDKs,這將有助于加速你的開發(fā)速度。然而,如果你希望連接器是動態(tài)的,而且它能夠隨著平臺或服務進行迭代的話,***是使用平臺或服務所提供的SDK,因為第三方SDK對一些新版本的支持可能會需要一段滯后的時間。
•你需要理解由一些提供商和平臺所設置的API流量限制(即單個用戶在一段時間內(nèi)對API端點所產(chǎn)生的API請求的數(shù)量),因為它將是我們能夠調(diào)用單個端點的一個給定閥值。
•對于一些異步的APIs(那些并非及時響應的API),請使用PUSH來提供響應或用POLL來接收。“Push”模式用到一個回調(diào)類型的端點,當它在可用時會發(fā)送一個響應。而在“POLL”模式里,請求反復調(diào)用一個API來檢查其狀態(tài)的更新情況。當你需要輪詢或重試API請求時,我們建議使用一個指數(shù)型的回退算法(backoff algorithm)來計算API調(diào)用之間的休眠間隔(sleep interval)。而指數(shù)型回退算法背后的思想就是在各個連續(xù)錯誤響應的重試之間,使用遞增的等待時間。
•一些云服務提供商/平臺會為每個服務的調(diào)用發(fā)布不同的端點。因此我們建議你維護一個包含多個API端點的服務目錄,以確保你在使用過程中能調(diào)用到那些正確的服務。
•有時各個端點會根據(jù)云平臺或服務的子賬戶的不同而有所區(qū)別。因此你需要確保在調(diào)用之前,各個端點能夠根據(jù)不同的需求被“串聯(lián)”起來。
希望上述***實踐能對你有所幫助,能讓你愉快的開發(fā)出API連接器。
【原標題】Best Practices for Developing API Connectors for Clouds (作者: Sabapathy Arumugam)
原文鏈接:https://dzone.com/articles/best-practices-for-developing-connectors-to-cloud
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】