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


















 
 
 







 
 
 
 