首页 阿里云SDK Java SDK 升级版 SDK 使用指南 SDK 客户端的初始化和请求方式

SDK 客户端的初始化和请求方式

本节主要介绍升级版 SDK 对于客户端的初始化以及 OpenAPI 请求方式。

SDK 客户端初始化

升级版 SDK 中因为具备完整的参数处理、返回值处理以及请求逻辑,所以可以给不同云产品的 SDK 生成不同的 Client 并包含其产品下所有的 OpenAPI 请求方法,可以使不同云产品之间的身份及鉴权信息隔离,使用上更加安全,下面是产品 ECS 和短信服务的升级版 SDK 初始化示例:

依赖信息

说明

产品依赖在接入不同产品时需要不同的依赖声明,您可在OpenAPI门户各产品的SDK信息窗口查看。

<!--    ECS产品依赖-->
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>ecs20140526</artifactId>
      <version>3.1.12</version>
    </dependency>
<!--    短信服务产品依赖-->
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>dysmsapi20170525</artifactId>
      <version>2.0.23</version>
    </dependency>

代码示例

说明

本示例代码身份验证方案为配置文件,执行以下代码之前需先创建配置文件并配置凭证信息,了解更多请参见身份验证配置

sudo vi ~/.alibabacloud/credentials.ini

; 凭证配置名称。
[default]
; 是否启用配置,若非true则配置无效
enable=true
; 已准备好的AccessKeyID。
access_key_id=<access_key_id>
; 已准备好的AccessKeySecret。
access_key_secret=<access_key_secret>
public static void main(String[] args) throws Exception {
    // 使用默认凭证初始化Credentials Client。
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
    // 使用Credentials配置凭证。
    config.setCredential(credentialClient);
    config.setRegionId("<regionId>");
    // 也可以直接设置 endpoint 指定请求地址,对于开发者而言更好理解
    // config.endpoint = "ecs.aliyuncs.com";
    com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(config);
    // 若接入dysmsapi即短信服务,则初始化dysmsapi产品包的Client类
    // config.endpoint = "dysmsapi.aliyuncs.com";
    com.aliyun.dysmsapi20170525.Client dysmsapiClient = new com.aliyun.dysmsapi20170525.Client(config);
}

OpenAPI 请求方式

升级版 SDK 中每个产品的 Client 包含了所有的 OpenAPI,所以可以指定 OpenAPI 请求方法来请求,其方法名对应 OpenAPI 首字母小写,一般有三个:

  • 可以不用传入运行参数的请求方法。

代码示例

import com.aliyun.ecs20140526.models.DescribeRegionsRequest;
import com.aliyun.ecs20140526.models.DescribeRegionsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
public static void main(String[] args) throws Exception {
    // 初始化 SDK 客户端
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
    config.setCredential(credentialClient);
    config.setRegionId("<regionId>");
    com.aliyun.ecs20140526.Client client = new com.aliyun.ecs20140526.Client(config);
    // 构造请求对象
    DescribeRegionsRequest describeRegionsRequest = new DescribeRegionsRequest();
    // 获取响应对象
    DescribeRegionsResponse resp = client.describeRegions(describeRegionsRequest);
    // response 包含服务端响应的 body 和 headers
    System.out.println(new Gson().toJson(resp.body));
    System.out.println(new Gson().toJson(resp.headers));
}

  • 需要传入运行参数的请求方法。

代码示例

    public static void main(String[] args) throws Exception {
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
        config.setCredential(credentialClient);
        config.setRegionId("<regionId>");
        com.aliyun.ecs20140526.Client client = new com.aliyun.ecs20140526.Client(config);
        // 构造运行时参数对象
        com.aliyun.teautil.models.RuntimeOptions runtimeOptions = new com.aliyun.teautil.models.RuntimeOptions();
        // 读取超时
        runtimeOptions.readTimeout=10000;
        // 连接超时
        runtimeOptions.connectTimeout=5000;
        // 是否自动重试
        runtimeOptions.autoretry=false;
        
        DescribeRegionsRequest describeRegionsRequest = new DescribeRegionsRequest();
        // 将运行时参数配置到请求中,将作用于本次调用
        DescribeRegionsResponse resp = client.describeRegionsWithOptions(describeRegionsRequest, runtimeOptions);
        // response 包含服务端响应的 body 和 headers
        System.out.println(new Gson().toJson(resp.body));
        System.out.println(new Gson().toJson(resp.headers));
    }

  • 需要进行文件上传的请求方法,该方法默认需要传入运行时参数,这种方法只有需要用到文件上传的 OpenAPI 才会具备,下述示例以视觉智能开放平台人体人脸产品为例介绍SDK如何使用本地文件上传调用 API。

代码示例

<!--    视觉智能开放平台人体人脸产品依赖-->
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>facebody20191230</artifactId>
      <version>3.0.7</version>
    </dependency>
import com.aliyun.facebody20191230.models.DetectBodyCountAdvanceRequest;
import com.aliyun.facebody20191230.models.DetectBodyCountResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import com.google.gson.Gson;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public static void main(String[] args) throws Exception{
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
    config.setCredential(credentialClient);
    config.setRegionId("<regionId>");
    com.aliyun.facebody20191230.Client client = new com.aliyun.facebody20191230.Client(config);
    RuntimeOptions runtimeOptions = new RuntimeOptions();
    // 读取文件并实例化文件流
    File f = new File("test.txt");
    InputStream in = new FileInputStream(f);

    DetectBodyCountAdvanceRequest request = new DetectBodyCountAdvanceRequest();
    // 将文件流配置给SDK请求对象
    request.setImageURLObject(in);
    // 调用本地文件上传方法,将文件上传
    DetectBodyCountResponse resp = client.detectBodyCountAdvance(request, runtimeOptions);
    // response 包含服务端响应的 body 和 headers
    System.out.println(new Gson().toJson(resp.body));
    System.out.println(new Gson().toJson(resp.headers));
}

说明

每个接口 API 都有独立的 Request ,命名方式为 ${API}${Request} ,例如 DescribeRegionRequest。Response 亦如此。

阿里云首页 阿里云SDK 相关技术圈