通过本文你将了解:

什么是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. JAVA实现复制文件夹

    package com.filetest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impor ...

  2. SQL SERVER 查询表或字段在哪里使用过

    select b.name from dbo.syscomments a, dbo.sysobjects b where a.id=b.id and b.xtype='p' and a.text li ...

  3. 不断优化,重构我的代码-----拖拽jquery插件

    最近学东西学的有点太散了,歇一阵子,重新完善之前的JQ插件,今天先上拖拽吧 // JavaScript Document (function($){ var defaults = { actionEl ...

  4. Server-Sent Events(HTML5 服务器发送事件)

    Server-Sent Events简介 Server-Sent Events(SSE)用于网页自动获取服务器上更新的数据,它是一个实时性的机制. 实时性获取数据的解决方案 对于某些需要实时更新的数据 ...

  5. vpn

    https://itunes.apple.com/us/app/sonicwall-mobile-connect/id822514576?mt=12

  6. MyBatis实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  7. Oracle数据库基础知识2

    字符操作相关_1 1.CONCAT关键字作用:连接字符串语法:CONCAT(字串1, 字串2)例如: CONCAT('hello','world') FROM DUAL; 注意:Oracle的CONC ...

  8. A Taxonomy of Computer Organizations

    COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  9. Mock之easymock, powermock, and mockito

    easymock, powermock, and mockito Easymock Class Mocking Limitations To be coherent with interface mo ...

  10. Tp验证码:$Verify = new \Think\Verify(); $Verify->entry(n);【参数n,页面有多个验证码时用】

    一.验证码参数:(中文字符集和英文字符集在父类里面都可以取到,可修改) //1.生成验证码 $Verify = new \Think\Verify(); $Verify->entry(n);[参 ...