通过本文你将了解:

什么是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 的证书

在上传完成后,你的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服务的更多相关文章

  1. Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的是国内由世纪互联运维的Windows Azure服务. 项目文件请在这里下载. 我们在使用Azure平台的时 ...

  2. 【Azure API 管理】解决调用REST API操作APIM(API Management)需要认证问题(Authentication failed, The 'Authorization' header is missing)

    问题描述 在通过REST API的方式来管理APIM资源,需要调用Azure提供的management接口.而这所有的接口,都是需要有Token并且还需要正确的Token.如若不然,就会获取到如下的错 ...

  3. 【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容

    问题描述 APIM中的内容(API, Policy)等内容,如果有需要更新时候,通常可以在Azure APIM门户上操作,通过一个接口一个设置的修改,也可以针对一个接口导入/导出的方式修改.当APIM ...

  4. 【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 ...

  5. 【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."

    API 管理 (APIM) 是一种为现有后端服务创建一致且现代化的 API 网关的方法. 问题描述 在设置了APIM客户端证书,用户保护后端API,让请求更安全. 但是,最近发现使用客户端证书的API ...

  6. 【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 ...

  7. Azure Management API 之 利用 Windows Azure Management Libraries 来控制Azure platform

    在此之前,我曾经发过一篇文章讲叙了如何利用Azure power shell team 提供的class library. 而就在这篇文章发布之后不久,我又发现微软发布了一个preview 版本的Wi ...

  8. [Windows Azure] Management REST API Reference

    Management REST API Reference 27 out of 42 rated this helpful - Rate this topic The SQL Database Man ...

  9. 【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题

    问题描述 使用 Azure 虚拟网络,Azure APIM 可以管理无法通过 Internet 访问的 API,达到以保护企业内部的后端API的目的.在虚拟网络中,启用网络安全组(NSG:Networ ...

随机推荐

  1. 2016huasacm暑假集训训练三 D - Invitation Cards

    题目链接:http://acm.hust.edu.cn/vjudge/contest/123674#problem/D 题意:一张个向图,求从点1开始到其他各点的最短路权值和加上从其他各点到点1的最短 ...

  2. UI控件闪烁及刷新

    我们常常在一个窗口上放置很多控件,在改变窗口大小时,控件会跟着一起闪烁... 此时,可以将窗口添加WS_CLIPCHILDREN属性即可.(如果包含多层,都需要WS_CLIPCHILDREN属性) 默 ...

  3. Android四大组件--ContentProvider详解(转)

    一.相关ContentProvider概念解析: 1.ContentProvider简介在Android官方指出的Android的数据存储方式总共有五种,分别是:Shared Preferences. ...

  4. IOS网络第二天 - 04-黑酷-GDataXML 解析

    ****** - (void)viewDidLoad { [super viewDidLoad]; /** 加载服务器最新的视频信息 */ // 1.创建URL NSURL *url = HMUrl( ...

  5. 解决Android Studio Gradle Build Running慢的问题

    Android Studio方便好用,但是Android Studio Gradle Build Running很慢 解决方法: C:\Users\你的用户名\.gradle 目录下新建一个文件名为 ...

  6. CACHE COHERENCE AND THE MESI PROTOCOL

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In contemporary multi ...

  7. 【java基础学习】网络编程

    网络编程 InetAddress tcp udp

  8. python爬虫学习-爬取某个网站上的所有图片

    最近简单地看了下python爬虫的视频.便自己尝试写了下爬虫操作,计划的是把某一个网站上的美女图全给爬下来,不过经过计算,查不多有好几百G的样子,还是算了.就首先下载一点点先看看. 本次爬虫使用的是p ...

  9. Java 对象销毁

    Java语言拥有一套完整的垃圾回收机制. 何种对象会被java虚拟机视为垃圾.主要包括以下两种情况: (1)对象引用超过其作用范围,则这个对象将被视为垃圾 (2)将对象赋值为null 参考资料:Jav ...

  10. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...