如何通过Azure Service Management REST API管理Azure服务
通过本文你将了解:
什么是Azure Service Management REST API
如何获取微软Azure 订阅号
如何获取Azure管理证书
如何调用Azure Service Management REST API
什么是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证书来进行交互认证的。
在调用Azure REST API的时候,至少有两个信息是必须具备的。
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)
如何通过Azure Service Management REST API管理Azure服务的更多相关文章
- Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
		<Windows Azure Platform 系列文章目录> 注意:本文介绍的是国内由世纪互联运维的Windows Azure服务. 项目文件请在这里下载. 我们在使用Azure平台的时 ... 
- 【Azure API 管理】解决调用REST API操作APIM(API Management)需要认证问题(Authentication failed, The 'Authorization' header is missing)
		问题描述 在通过REST API的方式来管理APIM资源,需要调用Azure提供的management接口.而这所有的接口,都是需要有Token并且还需要正确的Token.如若不然,就会获取到如下的错 ... 
- 【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容
		问题描述 APIM中的内容(API, Policy)等内容,如果有需要更新时候,通常可以在Azure APIM门户上操作,通过一个接口一个设置的修改,也可以针对一个接口导入/导出的方式修改.当APIM ... 
- 【Azure API 管理】解决API Management添加AAD Group时遇见的 Failed to query Azure Active Directory graph due to error 错误
		问题描述 为APIM添加AAD Group时候,等待很长很长的时间,结果添加失败.错误消息为: Write Groups ValidationError :Failed to query Azure ... 
- 【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."
		API 管理 (APIM) 是一种为现有后端服务创建一致且现代化的 API 网关的方法. 问题描述 在设置了APIM客户端证书,用户保护后端API,让请求更安全. 但是,最近发现使用客户端证书的API ... 
- 【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中
		问题描述 根据文档 https://docs.azure.cn/zh-cn/api-management/api-management-howto-log-event-hubs, 可以将Azure A ... 
- Azure Management API 之 利用 Windows Azure Management Libraries 来控制Azure platform
		在此之前,我曾经发过一篇文章讲叙了如何利用Azure power shell team 提供的class library. 而就在这篇文章发布之后不久,我又发现微软发布了一个preview 版本的Wi ... 
- [Windows Azure] Management REST API Reference
		Management REST API Reference 27 out of 42 rated this helpful - Rate this topic The SQL Database Man ... 
- 【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题
		问题描述 使用 Azure 虚拟网络,Azure APIM 可以管理无法通过 Internet 访问的 API,达到以保护企业内部的后端API的目的.在虚拟网络中,启用网络安全组(NSG:Networ ... 
随机推荐
- 如何使用sysdba身份通过jdbc连接oracle?
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Properties conProps = new ... 
- IOS网络第二天 - 04-黑酷-GDataXML 解析
			****** - (void)viewDidLoad { [super viewDidLoad]; /** 加载服务器最新的视频信息 */ // 1.创建URL NSURL *url = HMUrl( ... 
- Android Unable to instantiate activity: Didn't find class on path
			Android Unable to instantiate activity: Didn't find class on path After i spend a while on this prob ... 
- Nodejs:简单的脚手架(一)
			html-webpack-plugin: 用来生成html文件的插件 glob: 用来筛选文件,文件目录 path: 管理文件路径 次脚手架里主要用到的是这3个插件,后续会根据所用插件逐渐完善 ... 
- Linux常用命令[转]
			在博客的草稿箱里一直有一份"Linux命令"的草稿,记录了一些常用的Linux命令,用于需要的时候查询.由于是出于个人使用的目的,所以这个清单并不完整.今天整理了一下这个清单,调整 ... 
- 微信小程序时代已经来临
			昨天估计微信公众号上产生了第一篇最快的30万+文章,10万+只花了10多分钟.就是冯大辉(著名Oracle专家,知名博主)同学的「微信应用号来了」. 为什么这么一篇如此简单又技术类的文章一下能刷遍朋友 ... 
- OC ---- 字典集合      iOS学习-----细碎知识点总结
			实例方法的创建 NSDictionary *wukong = [[NSDictionary alloc] initWithObjectsAndKeys:", @"age" ... 
- php 入门1
			一.php在引入文件和js引入文件的区别 1.php在引入文件是用代码控制,而js是通过标签的属性src引入: 2.php引入可以在引入下写代码,而js是不可以的 3.静态效果的js可以引入的时间,引 ... 
- C# 获取汉字拼音首字母
			最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ... 
- The connection to adb is down, and a severe error has occured.(转)
			启动android模拟器时.有时会报The connection to adb is down, and a severe error has occured.的错误.在网友说在任务管理器上把所有ad ... 
