阿里云 SDK

本文为您介绍使用阿里云 SDK 调用 OpenAPI

阿里云 SDK

阿里云为开发者提供了多种编程语言(Java、C#、Go、Python、Node.js/TypeScript、PHP、C++ 等)的 SDK。开发者只需要集成 SDK,通过 SDK 暴露的方法直接调用 OpenAPI 。SDK 统一封装了签名逻辑、超时机制、重试机制,并根据文档返回结构化 Response 对象,易于开发。

更多关于阿里云SDK的介绍请参见阿里云SDK

集成方法

  1. 访问OpenAPI 门户网站,点击顶部image.png按钮,搜索云产品。

  2. 点击顶部 SDK 菜单,选择您需要的集成的语言。

  3. 查看 SDK 安装方式和集成代码示例,完成 SDK 集成。

V2 和 V1 版本比较

升级版 SDK(V2)较原版(V1)支持的语言更多,支持更复杂的 OpenAPI 使用场景,支持异步调用和同步调用,解决了原版 SDK 的部分历史遗留问题,使用起来更加灵活与强大。推荐使用升级版 SDK(V2),更多详情请参见V1.0 SDK和V2.0 SDK

说明

新项目接入建议您使用升级版 SDK(V2),已使用原版 SDK(V1)集成的项目建议进行升级。

集成案例

我们以 Java 语言集成 SDK,调用 ECS的DescribeInstance场景为例,示例代码如下:

V2

升级版 SDK(V2)中包含了参数处理,请求组装以及返回值处理等 OpenAPI 请求的主要逻辑,开发者可以通过安装相关产品的 SDK 包依赖即可完成 OpenAPI 的请求,不再依赖核心库 core。

依赖

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ecs20140526</artifactId>
  <version>5.1.0</version>
</dependency>

示例代码

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.ecs20140526.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
        return new com.aliyun.ecs20140526.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见阿里云Java SDK身份验证配置章节
        com.aliyun.ecs20140526.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.runInstancesWithOptions(runInstancesRequest, runtime);
        } catch (TeaException error) {
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

V1

依赖安装

必须安装 SDK 核心库 Core,核心库包括对 OpenAPI 的 HTTP 请求、认证信息、签名算法、异常处理等主要逻辑等。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.6.1</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-ecs</artifactId>
  <version>5.11.5</version>
</dependency>

示例代码

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;

public class DescribeInstances {

    public static void main(String[] args) {
        // 创建DefaultAcsClient实例并初始化。
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);

        // 创建API请求并设置参数。
        DescribeInstancesRequest request = new DescribeInstancesRequest();
        request.setRegionId("cn-hangzhou");
        request.setInstanceNetworkType("vpc");
        request.setInstanceChargeType("PostPaid");
        request.setInternetChargeType("PayByTraffic");
        request.setPageSize(10);

        try {
            // 发起请求并处理应答或异常。
            DescribeInstancesResponse response = client.getAcsResponse(request);
            for (DescribeInstancesResponse.Instance instance : response.getInstances()) {
                System.out.println(instance.getImageId());
                System.out.println(instance.getInstanceId());
                System.out.println(instance.getPublicIpAddress());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
}