阿里云API附录:如何调用接口

  如何调用接口

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

  请求组成

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

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

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

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

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

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

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

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

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

  调用示例

  以DescribeRegions接口为例:

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

  http://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编码后得到的

  http://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格式。

时间: 2024-12-28 12:03:57

阿里云API附录:如何调用接口的相关文章

阿里云API调用方式有哪些

阿里云API调用方式 对 ECS API 接口调用是通过向 ECS API 的服务端地址发送 HTTP GET 请求,并按照接口说明在请求中加入相应请求参数来完成的;根据请求的处理情况,系统会返回处理结果. 请求结构 公共参数 返回结果 签名机制

大中华地区(含港澳台)空气质量接口参加阿里云API as a Service 大赛​

近日,上海青悦的大中华地区(含港澳台)空气质量接口参加阿里云API as a Service 大赛. 现在,比赛正在进行第一阶段--API Hackathon展示阶段. 大中华地区空气质量接口 大中华地区(含港澳台)空气质量接口--含大陆国控,省控,地市控,港澳台等2700多个空气质量监测站点,用于空气质量的实时监测,具有以下优势: 1.数据权威,均为官方环保局发布数据.2.覆盖范围广,整个大中华地区都覆盖.3.站点密度高,除了国控外,还包括各个省市自建空气质量监测站点.4.对各级监测站的级别(

阿里云API创新大赛百万大奖花落谁家?

历时120天.120个参赛战队.100+参赛作品.100+理工类高校.1000+开发者报名参与,共同完成了云计算领域在中国区域的首个API as a Service Solution大赛. 阿里云API创新大赛于2017.02月正式启动,以API 经济的商业模式为模型,邀请广大参赛者共同探索中国的 API 经济.  6月11日下午13:30分,API as a Service Solution在上海云栖大会现场开启了终极PK,10个参赛战队在不同纬度展示了API经济强势回归带来的新型商业模式. 

拥抱API经济:教你三步使用SDK玩转阿里云API

众所周知,阿里云提供了全方位.多层次的云计算产品体系.阿里巴巴技术委员会主席王坚博士说过,要让云计算像水电一样方便获得.为了开发者无缝衔接阿里云的众多服务,将它们集成到自己的应用系统,阿里云开放了API和用来访问API的工具SDK. 什么是阿里云SDK? 阿里云Java SDK让您不用复杂编程即可访问云服务器.CDN(内容分发网络).OSS(对象存储)等丰富又强大的云计算基础设施.它是面向开发者的编程库,能够直接应用在开发者的应用程序里,被应用逻辑调用.打个简单的比方,应用程序是家用电器,阿里云

基于Python的阿里云API签名算法及邮件推送服务

基于Python的阿里云API签名算法及邮件推送服务

开发必看-阿里云API精选手册来了(100+ 阿里云自有产品与云生态API精选)

产品亮点 API精选手册,精选了100+ 个 API,内容出自阿里云自有产品与云生态精选API,汇聚了从数据智能.安全风控.云通信.视频服务.应用服务.生活服务.金融征信.气象水利.到企业服务等十几个应用场景. 产品说明 为什么做这本手册?  1. 想要快速实现一个功能,却不知道哪里可以查询是否有现成的API?  2. 参加大赛想要进行应用创新,却不知道有哪些现成的API可以使用?  3. 公司面临转型,如何快速获得他人的技术能力(API),来完成商业模式的创新?   如果您也遇到上述类似的问题

阿里云API精选手册,业界第一本

阿里云API精选手册(免费下载https://yq.aliyun.com/download/2350),为拓展API经济而生,内容出自阿里云自有产品与云生态精选产品场景化 APIs精选功能汇集.场景介绍.使用指导等等.100+ API,汇聚了数据智能.安全风控.云通信.视频服务.应用服务.生活服务.金融征信.气象水利.企业服务等十多应用场景. 有人说 API 带动了 IOT 的增长,也有人说一个发展的 IOT 生态系统推动了强大的 API 及 API 经济的需求.实质上两者有着循环和共生的关系.

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

错误代码表 客户端错误 详见各个接口的错误码 服务器端错误 错误代码 描述 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 内部错误

阿里云API调用公共参数有哪些

公共参数 公共请求参数 公共请求参数是指每个接口都需要使用到的请求参数. 名称类型是否必须描述 FormatString否返回值的类型,支持 JSON 与 XML.默认为 XML. VersionString是API 版本号,为日期形式:YYYY-MM-DD,本版本对应为 2014-05-26. AccessKeyIdString是阿里云颁发给用户的访问服务所用的密钥 ID. SignatureString是签名结果串,关于签名的计算方法,请参见<签名机制>. SignatureMethodS