安装Java SDK

本文以调用Function AI的查询项目接口GetProject为例,介绍Java SDK的安装和使用。关于GetProject接口的API文档,请参见GetProject - 查询项目

前提条件

  • 创建AccessKey

    调用阿里云OpenAPI通常需要设置访问密钥(AccessKey),由于阿里云账号(主账号)拥有资源的所有权限,AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。

  • 在环境变量中配置AccessKey

    具体操作步骤,请参见Linux、macOSWindows系统配置环境变量

环境要求

Java版本必须不低于Java 8。

安装方式

Java SDK支持多种安装方式,本示例以Apache Maven安装方式为例,更多安装方式获取方式,请参见SDK中心

打开Maven项目的pom.xml文件,在<dependencies>节点中加入依赖配置,并刷新Maven配置。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>devs20230714</artifactId>
  <version>2.4.1</version>
</dependency>

使用SDK

1.初始化客户端

SDK中,所有的OpenAPI均通过SDK提供的请求客户端(Client)发起调用。因此,在调用OpenAPI之前,需要先对请求客户端进行初始化。请求客户端支持多种方式初始化,本示例以通过AccessKey初始化客户端为例。更多初始化方式请参见管理访问凭据

import com.aliyun.devs20230714.Client;
import com.aliyun.teaopenapi.models.Config;

public class Sample {
    private static Client createClient() throws Exception {
        Config config = new Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Endpoint 请参考 https://api.aliyun.com/product/Devs
                .setEndpoint("devs.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }
}

2.构建接口的请求对象

在发起调用前,请查看该接口的API文档获取参数信息。

说明

与部分需要构建复杂Request对象的接口不同,GetProject接口的主要参数projectName是直接作为字符串传入。

// 准备要查询的项目名称
String projectName = "my-devs-project"; // 替换为您的真实项目名称

3.发起调用

通过客户端调用OpenAPI时,支持设置运行时参数,例如超时配置、代理配置等,更多信息请查看进阶配置

说明

接口返回对象命名规则:{API名称}Response,例如GetProject该接口的返回对象为GetProjectResponse。

// 设置运行时参数
RuntimeOptions runtime = new RuntimeOptions();
java.util.Map<String, String> headers = new java.util.HashMap<>();

// 调用 GetProject 接口
GetProjectResponse response = client.getProjectWithOptions(projectName, headers, runtime);
// 打印返回结果的Body部分(JSON格式)
System.out.println(com.aliyun.teautil.Common.toJSONString(response.getBody()));

4.异常处理

Java SDK将异常进行了细致的分类,主要划分为TeaUnretryableExceptionTeaException

  • TeaUnretryableException:主要是因为网络问题造成,一般是网络问题达到最大重试次数后抛出。

  • TeaException:主要以业务报错为主的异常,例如参数错误、认证失败等。

更多关于异常处理的介绍,请参见异常处理

重要

建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。

5.完整示例

import com.aliyun.devs20230714.Client;
import com.aliyun.devs20230714.models.GetProjectResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaUnretryableException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

public class Sample {
    private static Client createClient() throws Exception {
        Config config = new Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Endpoint 请参考 https://api.aliyun.com/product/Devs
                .setEndpoint("devs.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }

    public static void main(String[] args) {
        try {
            Client client = Sample.createClient();
            
            // 准备要查询的项目名称
            String projectName = "my-devs-project"; //请将此处替换为您的真实项目名称

            // 设置运行时参数
            RuntimeOptions runtime = new RuntimeOptions();
            java.util.Map<String, String> headers = new java.util.HashMap<>();
            
            // 调用 GetProject 接口
            GetProjectResponse response = client.getProjectWithOptions(projectName, headers, runtime);
            
            System.out.println("API 调用成功!");
            System.out.println(com.aliyun.teautil.Common.toJSONString(response.getBody()));

        } catch (TeaUnretryableException ue) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.err.println("发生网络不可重试异常: ");
            ue.printStackTrace();
            System.err.println("错误信息: " + ue.getMessage());
            System.err.println("原始请求: " + ue.getLastRequest());
        } catch (TeaException e) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.err.println("发生API业务异常: ");
            e.printStackTrace();
            System.err.println("错误码: " + e.getCode());
            System.err.println("错误信息: " + e.getMessage());
            System.err.println("RequestId: " + e.getData().get("RequestId"));
        } catch (Exception e) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.err.println("发生未知异常: ");
            e.printStackTrace();
        }
    }
}

更多内容

除了使用上述调用方式外,您还可以使用泛化调用方式调用Function AIOpenAPI,详细介绍请参见泛化调用