阿里云API调用附录包括哪些

 
阿里云API调用附录包括哪些
2016-09-15 06:53:39 /故事大全

错误代码表

客户端错误

详见各个接口的错误码

服务器端错误

错误代码 描述 Http 状态码 语义 ServiceUnavailable The request has failed due to a temporary failure of the server. 503 服务不可用 InternalError The request processing has failed due to some unknown error, exception or failure. 500 内部错误

实例状态表

状态名 状态说明 Pending 准备中 Stopped 已停止 Starting 启动中 Running 运行中 Stopping 停止中 Deleted 已释放

实例状态图

普通云盘状态表

错误代码 描述 In_use 使用中 Available 待挂载 Attaching 挂载中 Detaching 卸载中 Creating 创建中 Deleting 删除中 Deleted 已删除 ReIniting 初始化中

其中Deleting和Deleted状态的磁盘不能通过DescribeDisks查询到,为内部状态。

普通云盘状态图

  磁盘种类表

磁盘种类 Category 单块最大容量 每个实例添加数据盘数 单实例下同类型最大容量 普通云盘 cloud 2000GB 4 8000GB(4×2000) 本地 SSD 盘 ephemeral_ssd 800GB 4 1024GB(不含系统盘)

如何调用接口

对ECS服务接口的调用是通过向ECS服务端发送HTTP请求(可以通过HTTP或HTTPS协议发送),并获取ECS服务对该请求响应结果的过程。ECS服务端在接收到用户请求后,对请求做必要的身份验证和参数验证,在所有验证成功后根据请求的指定参数提交并完成相应操作,并把处理的结果以 HTTP响应的形式返回给调用者。

请求组成

请求由以下几个部分组成:

HTTP方法——目前ECS服务的所有接口只支持GET方法的调用。

请求URL——请求的服务地址、要执行的操作名称、操作参数和公共请求参数都包含在请求的URL中。

服务端地址:ECS服务的域名是//ecs.aliyuncs.com/和https://ecs.aliyuncs.com/。为了保证请求的安全性,强烈推荐您使用HTTPS通道。 (HTTPS加入了SSL层对通信进行了加密,可以防止通信被截获而导致敏感信息泄露。)

操作名称:每个接口都需要指定要执行的操作名称,即Action参数。

操作参数:根据要执行的操作不同,需要传入不同的操作参数,详见每个接口的说明。

公共请求参数:包含时间戳、签名信息等每个请求都要包含的参数。

为了使服务端能够正确地验证用户的身份并授权请求执行,请求在提交前要进行签名处理。签名的规则参见签名机制一节。

在服务端对请求处理完成后,会返回响应结果。响应结果分为成功结果和错误消息,格式描述参见返回结果一节。客户端可以解析响应的消息体,得到执行结果。

调用示例

以DescribeRegions接口为例:

对应的Action是DescribeRegions,该接口用于查询可用地域列表, 因为该接口没有自定义的参数,所以只需要添加公共请求参数(除了Signature, 该参数需要后面通过签名算法计算出来)。添加了参数之后,请求的URL是(为了便于阅读,这里展示的是进行URL编码前的URL):

//ecs.aliyuncs.com/?TimeStamp=2016-02-23T12:46:24Z&Format=XML&AccessKeyId=testid&Action=DescribeRegions&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&SignatureVersion=1.0

按照签名计算规则,先构造出规范化请求字符串(Canonicalized Query String),如下:

AccessKeyId=testid&Action=DescribeRegions&Format=XML&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion=1.0&TimeStamp=2016-02-23T12%3A46%3A24Z&Version=2014-05-26

再构造出用于签名的字符串StringToSign值为:

GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeRegions%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf%26SignatureVersion%3D1.0%26TimeStamp%3D2016-02-23T12%253A46%253A24Z%26Version%3D2014-05-26

以下Java示例代码演示了如何添加公共请求参数、如何构造用请求参数构造规范化请求字符串,以及如何构造StringToSign字符串。示例假定所有请求参数放在一个Map对象里,使用的Access Key ID是“testid”。

final String HTTP_METHOD = "GET";

Map parameters = new HashMap();

// 加入请求参数

parameters.put("Action", "DescribeRegions");

parameters.put("Version", "2014-05-26");

parameters.put("AccessKeyId", "testid");

parameters.put("TimeStamp", formatIso8601Date(new Date()));

parameters.put("SignatureMethod", "HMAC-SHA1");

parameters.put("SignatureVersion", "1.0");

parameters.put("SignatureNonce", UUID.randomUUID().toString());

parameters.put("Format", "XML");

// 对参数进行排序

String[] sortedKeys = parameters.keySet().toArray(new String[]{});

Arrays.sort(sortedKeys);

final String SEPARATOR = "&";

// 生成stringToSign字符串

StringBuilder stringToSign = new StringBuilder();

stringToSign.append(HTTP_METHOD).append(SEPARATOR);

stringToSign.append(percentEncode("/")).append(SEPARATOR);

StringBuilder canonicalizedQueryString = new StringBuilder();

for(String key : sortedKeys) {

// 这里注意对key和value进行编码

canonicalizedQueryString.append("&")

.append(percentEncode(key)).append("=")

.append(percentEncode(parameters.get(key)));

}

// 这里注意对canonicalizedQueryString进行编码

stringToSign.append(percentEncode(

canonicalizedQueryString.toString().substring(1)));

其中需要注意的是,TimeStamp参数要求符合ISO8601规范,并注意使用UTC时间,否则会遇到错误。下面的示例代码演示了如何生成符合规范的TimeStamp字符串:

private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd"T"HH:mm:ss"Z"";

private static String formatIso8601Date(Date date) {

SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);

df.setTimeZone(new SimpleTimeZone(0, "GMT"));

return df.format(date);

}

生成规范化请求字符串(示例中的canonicalizedQueryString变量),以及SringToSign时,都需要进行必要的编码。编码的规则在签名机制一节中有详细描述。下面的示例代码演示了编码的算法:

private static final String ENCODING = "UTF-8";

private static String percentEncode(String value) throws UnsupportedEncodingException {

return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;

}

假设使用的Access Key Id是“testid”, Access Key Secret是“testsecret”,用于计算HMAC的Key就是“testsecret&”,最终计算得到的签名值为:

CT9X0VtwR86fNWSnsc6v8YGOjuE=

计算签名的示例代码(Java):

// 以下是一段计算签名的示例代码

final String ALGORITHM = "HmacSHA1";

final String ENCODING = "UTF-8";

key = "testsecret&";

Mac mac = Mac.getInstance(ALGORITHM);

mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM));

byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING));

String signature = new String(Base64.encodeBase64(signData));

增加签名参数后,请按照RFC3986规则进行URL编码后得到的

//ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureMethod=HMAC-SHA1&TimeStamp=2016-02-23T12%3A46%3A24Z

接下来,通过HTTP请求的方式向上面的URL地址发送HTTP请求,并得到ECS服务端的响应结果(示例):

通过解析这个XML结果即可以得到所有可用的地域Id和LocalName的列表。如果在提交请求时,指定Format参数为JSON,那么返回结果的格式为JSON格式。

所属专题:
如果您觉得本文或图片不错,请把它分享给您的朋友吧!

 
故事大全
 
版权所有- © 2012-2015 · 故事大全 SITEMAP站点地图手机看故事 站点地图