经过本文你将了解: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)