經過本文你將瞭解:html
什麼是Azure Service Management REST API編程
如何獲取微軟Azure 訂閱號windows
如何獲取Azure管理證書工具
如何調用Azure Service Management REST APIpost
什麼是Azure Service Management REST API開發工具
Azure Service Management REST API(以後簡稱爲Azure REST API)是微軟開放的一組REST API,它使得Azure用戶不只能夠從Azure門戶網站上對運行在Azure上的服務進行管理,同時也能夠經過本身或其餘第三方的程序來對Azure上的服務進行管理。網站
基於REST服務的REST API有一個最大的好處就是它是使用HTTP請求進行調用的,這樣使得你能夠用各類各樣的開發語言和開發工具來開發基於Azure服務管理的服務及應用。(包括微軟的Azure PowerShell也是基於該API進行開發的)。加密
全部Azure REST API 都是經過SSL加密的,調用的時候須要用過X.509 v3證書來進行交互認證的。url
在調用Azure REST API的時候,至少有兩個信息是必須具有的。spa
1.微軟Azure訂閱號。
2.存在於Azure 證書管理服務中的X.509 V3證書。
如何獲取微軟Azure 訂閱號
微軟Azure訂閱號(Subscription ID)就是微軟Azure中用來識別用戶身份的用戶名。它是一串ID,每一個對Azure REST API的調用都會在URL內包含這個ID。Azure REST API就是經過這種方式識別用戶身份的。
獲取這個ID的方式也十分簡單:
1.登陸Azure門戶
2.在左邊目錄欄中找到設置選項點擊打開
3.在右邊找到帳戶對應的subscription id,這就是Azure的訂閱號了,在調用Auzre REST API的時候會用到。
如何獲取Azure管理證書
Azure 管理證書是一個用於驗證代理(如 Visual Studio Tools for Windows Azure 或使用服務管理 API 的客戶端應用程序)的 X.509 v3 證書,從而表明訂閱全部者管理訂閱資源。Azure 管理證書將上載到 Azure 中並存儲在訂閱級別。
在調用Azure REST API的時候須要使用一個與Auzre 證書管理器中證書相同的客戶端證書,纔可以經過驗證。
獲取這個證書的途徑有兩種
第一種:本地建立證書並上載到Azure中
這種方法的詳細過程請參考 MSDN:
在上傳完成後,你的Azure管理證書中會存放在本地的機器「我的」證書存儲中。
你能夠經過這個證書的指紋來找到該證書。
1.打開Azure管理頁面
2.在左邊目錄欄中找到設置選項點擊打開
3.在右邊目錄選項中找到「管理證書」選項點擊打開
4.經過你上傳時輸入的名稱找到你上傳的證書,獲取其指紋
5.在程序中經過指紋來從「我的」證書存儲中獲取證書對象
在代碼中獲取證書對象的代碼以下:
public static string CertificateThumbprint = "f70dee7fec7364a57c09f09811c7519bc4402c56";//經過上面第四步能夠得到指紋的字符串。 public static X509Certificate2 Certificate; X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); certificateStore.Open(OpenFlags.ReadOnly); X509Certificate2Collection certs = certificateStore.Certificates.Find( X509FindType.FindByThumbprint, CertificateThumbprint, false); if (certs.Count == 0) { Console.WriteLine("Can't find the certificate in your local computer."); Console.ReadKey(); return; } else { Certificate = certs[0]; }
第二種:經過下載publishsettings 文件的方式獲取管理證書
1.經過如下連接下載publishsettings文件(須要登陸後方可下載)
https://manage.windowsazure.com/publishsettings/index?client=vs&schemaversion=2.0&whr=azure.com
2.以文本的形式打開該文件,該文件中會附帶用戶證書名以及Azure管理證書轉化成Base64以後的字符串。
3.將這個證書的base64字符串轉化成證書對象。
相關代碼以下:
private const string SettingsFilePath = @"{publish settings file path}"; private const string SubscriptionID = "{Subscription ID}"; private static X509Certificate2 getCertificateBySubscriptionID(string settingsFilePath, string subscriptionID) { XElement xElement = XElement.Load(settingsFilePath); var subscriptionElements = xElement.Descendants("Subscription"); var base64cer = subscriptionElements .Where(e => e.Attribute("Id").Value.ToString() == subscriptionID) .FirstOrDefault() .Attribute("ManagementCertificate").Value.ToString(); return new X509Certificate2(Convert.FromBase64String(base64cer)); }
第一種方法是MSDN介紹文檔中的方法,但我我的認爲第二種方法更加方便,更加簡單,由於使用第二種方法,你的程序在其餘地方運行時只須要將證書以字符串的形式保存就能夠了,而若是用第一種,你須要在其餘機器上也將證書導入證書管理器中,這樣會很是的麻煩,並且有時還會有一些莫名其妙的錯誤。
如何調用Azure Service Management REST API
調用API的方式就是利用HttpWebRequest發送HTTP請求
咱們能夠參考如下示例文檔來進行調用。
http://msdn.microsoft.com/zh-cn/library/azure/hh264518.aspx
該實例文檔列出了建立一個雲存儲帳號所須要的信息。
在該文檔中的請求下面咱們能夠獲取發送請求的URL,以及HTTP請求的方法。
在請求標頭下面咱們能夠獲取請求必須的標頭
注:這裏值得注意的是x-ms-version
x-ms-version |
必需。指定用於此請求的操做的版本。必須將此標頭的值設置爲 2011-06-01 或更高版本。有關版本控制標頭的更多信息,請參閱服務管理版本控制。 |
這裏須要注意的是,因爲參考文檔的更新不是很快,頗有可能Azure 最新的REST API已經不支持老版本的x-ms-version了,建議參閱服務管理版本控制直接取最新的版本。
請求正文例舉了一個包含了全部必須與非必須參數請求主體,而且用表格列出了各個參數是否必須,以及他們的功能及做用。
狀態代碼描述了響應請求返回的狀態代碼。方便咱們在獲取響應的時候能夠直接判斷調用操做是否成功。
最後咱們能夠在示例代碼中找到調用REST API的示例代碼。
在這個官方示例中包含了許多使用REST API的技巧方法,總結以下:
一. 如何用程序獲取證書對象。(在本文以前已經講過了,能夠用經過下載publishsettings 文件的方式獲取管理證書的方式替換)
二. 如何建立一個發送HTTP 請求的公共方法。(示例中的 invokeRequest方法)
三. 如何獲取一個HTTP請求返回的信息,包括在出現異常的狀況下如何獲取其返回的錯誤信息。能夠參考(示例中invokeRequest 方法最後一部分的代碼)
try { response = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { // GetResponse throws a WebException for 4XX and 5XX status codes response = (HttpWebResponse)ex.Response; } try { statusCode = response.StatusCode; if (response.ContentLength > 0) { using (XmlReader reader = XmlReader.Create(response.GetResponseStream())) { responseBody = XDocument.Load(reader); } } if (response.Headers != null) { requestId = response.Headers["x-ms-request-id"]; } } finally { response.Close(); } if (!statusCode.Equals(expectedCode)) { throw new ApplicationException(string.Format( "Call to {0} returned an error:{1}Status Code: {2} ({3}):{1}{4}", uri.ToString(), Environment.NewLine, (int)statusCode, statusCode, responseBody.ToString(SaveOptions.OmitDuplicateNamespaces))); } return requestId;
四. 如何獲取操做的狀態信息(能夠參考GetOperationStates方法)
總結:
Azure REST API 優勢:
Azure REST API是基於SOA開發的REST服務,開發者可使用任何支持HTTP協議的開發語言來開發基於該服務的程序。
Azure REST API 缺點:
直接如示例般Azure REST API可是其編程的模式並不是如面向對象的編程,因此在調用的時候複用性,和擴展性都不是很強,須要開發者本身去構建對象,來增長擴展性。
(好在,微軟的開發人員已經推出了基於REST API的C#類庫,來方便.net開發人員用他們熟悉的方式來間接的調用Azure REST API。 詳情請參照:
Azure Management API 之 利用 Windows Azure Management Libraries 來控制Azure platform)