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