集成SDK

更新时间:

在调用OpenAPI时,建议采用在项目中集成SDK的方式。使用SDK可以简化开发流程,实现功能的快速集成,同时有效降低维护成本。本文将详细介绍如何在项目中安装SDK以及使用SDK开发。

环境要求

JDK版本 >= 1.6。

安装SDK

在使用Java V1.0 SDK时,需要同时安装云产品SDK和核心SDK。

云产品SDK

云产品SDK主要包含了调用OpenAPI所需的请求参数Request对象及返回结果Response对象。以云产品ECSSDK为例,建议通过Maven依赖的方式进行引入,以下为其Maven依赖信息:

<dependencies>
  <!--  ecs V1.0 SDK  -->
  <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ecs</artifactId>
    <version>5.11.7</version>
  </dependency>
</dependencies>

V1.0 SDK的命名方式为aliyun-java-sdk-${产品code}。您也可以通过SDK信息中心来查看具体产品的V1.0 SDK的信息。

核心SDK

核心SDK主要包含在调用OpenAPI时所需的Client对象、签名逻辑以及异常处理等功能。建议通过Maven依赖的方式,依赖信息如下:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.7.3</version>
</dependency>

版本信息请参见Maven Repository: com.aliyun » aliyun-java-sdk-core

使用SDK

本文将以调用ECSDescribeInstances接口为例,为您分步介绍如何使用V1.0 SDK。

1. 初始化请求客户端

所有的OpenAPI均通过核心SDK提供的Client发起调用,因此在调用OpenAPI之前,需要先进行客户端初始化。这里以使用AK初始化方式为例,更多客户端初始化方式请参见管理访问凭据

说明

示例采用读取环境变量的方式获取凭证,运行代码前需配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见Linux、macOSWindows系统配置环境变量

com.aliyuncs.profile.DefaultProfile profile = com.aliyuncs.profile.DefaultProfile.getProfile(
        "<REGION_ID>",
        // 从环境变量获取RAM用户的AccessKey ID
        System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
        // 从环境变量获取RAM用户的AccessKey Secret
        System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
com.aliyuncs.IAcsClient client = new com.aliyuncs.DefaultAcsClient(profile);
说明

Client的模式存在线程不安全的问题,而且通过一个profile信息在不同产品之间混用,容易造成的权限管理问题,建议您使用V2.0 SDK开发。

2. 构造OpenAPI请求参数对象

可以使用云产品SDK中提供的Request对象封装请求参数。

说明

OpenAPI请求参数对象的命名方式为:<OpenAPI名称>Request

com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest request = new com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest();
request.setRegionId("cn-hangzhou");
request.setInstanceIds(new com.google.gson.Gson().toJson(Arrays.asList("i-bp1fq61ktxxxxxxxxxxxx","i-bp1fq62ktxxxxxxxxxxxx")));

3. 发起请求

通过步骤1创建的请求客户端调用getAcsResponse接口发起请求,该接口的参数为步骤2构造的Request对象。调用成功后,将返回Response对象。

说明

OpenAPI返回参数对象的命名方式为:<OpenAPI名称>Response

com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse response = client.getAcsResponse(request);
System.out.println(new com.google.gson.Gson().toJson(response));

4. 异常处理

在调用OpenAPI时如果发生异常,您可以通过捕获ServerExceptionClientException来获取错误信息。其中ClientException异常一般是在初始化客户端过程中参数填错,例如AK输入错误;ServerException异常产生的原因有很多种,您可以根据异常中返回的RequestId联系阿里云协助排查问题。

完整代码示例

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;
import com.google.gson.Gson;

import java.util.Arrays;

public class Sample {
    public static void main(String[] args) {
        try {
            DefaultProfile profile = DefaultProfile.getProfile(
                    "<REGION_ID>",
                    // 从环境变量获取RAM用户的AccessKey ID
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // 从环境变量获取RAM用户的AccessKey Secret
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            IAcsClient client = new DefaultAcsClient(profile);
            DescribeInstancesRequest request = new DescribeInstancesRequest();
            request.setRegionId("cn-hangzhou");
            request.setInstanceIds(new Gson().toJson(Arrays.asList("i-bp1fq61ktxxxxxxxxxxxx", "i-bp1fq62ktxxxxxxxxxxxx")));
            DescribeInstancesResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            // 示例仅做打印展示。请重视异常处理,在工程项目中切勿直接忽略异常。
            System.out.println("ServerException:" + e.getErrMsg());
        } catch (ClientException e) {
            // 示例仅做打印展示。请重视异常处理,在工程项目中切勿直接忽略异常。
            System.out.println("ClientException:" + e.getErrMsg());
        }
    }
}

相关文档