通用流程

本文以查询便捷办公网络的接口DescribeOfficeSites为例,介绍编写无影云电脑企业版Java SDK的通用流程。

前提条件

您已经创建了AccessKey。具体操作,请参见创建AccessKey

说明

为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户无影云电脑企业版相关的访问权限,再使用RAM用户的AccessKey调用SDK。具体操作,请参见权限管理概述

操作步骤

如果想要先验证某个OpenAPI接口,可以在阿里云官方网站进行调试。下文以查询便捷办公网络的接口DescribeOfficeSites为例。

  1. 打开DescribeOfficeSites - 查询办公网络的详细信息文档,并单击右上角的调试

  2. OpenAPI门户页面上,根据提示登录您的阿里云账号。

  3. 填写相关输入参数后,单击发起调用,即可看到调用结果。

    api_debug

  4. 调试通过后,如需获取示例代码,请在右侧面板上单击SDK示例页签,然后选择一种语言,并单击下载完整工程

    说明

    完整工程中包含SDK信息和当前OpenAPI的调用demo。

    api_debug_download_sdk_sample

示例工程代码说明

上述工程中的示例代码说明如下,供参考。

  1. 初始化配置对象com.aliyun.teaopenapi.models.Config

    Config对象存放AccessKeyId、AccessKeySecretendpoint等配置,如示例中的endpointecd.cn-shanghai.aliyuncs.com。更多关于地域的信息,请参见DescribeRegions - 查看可选的地域和可用区

    com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.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/ecd
      config.endpoint = "ecd.cn-shanghai.aliyuncs.com";
  2. com.aliyun.ecd20200930.Client类中生成对象client。

    后续从com.aliyun.ecd20200930.models中获得requestresponse

    com.aliyun.ecd20200930.Client client = Sample.createClient();
  3. 创建对应APIRequest,类的命名规则为API方法名加上Request。

    示例如下:

    com.aliyun.ecd20200930.models.DescribeOfficeSitesRequest describeOfficeSitesRequest = new com.aliyun.ecd20200930.models.DescribeOfficeSitesRequest()
  4. 设置请求类request的参数。

    通过request类的属性设置必要的信息,即API中必须要提供的信息。

    describeOfficeSitesRequest.setRegionId("your_value")
  5. 通过client对象获得对应request的响应response

    com.aliyun.ecd20200930.models.DescribeOfficeSitesResponse resp = client.describeOfficeSitesWithOptions(describeOfficeSitesRequest, runtime);
    com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
  6. 调用response中对应的属性获得返回的参数值。

    假设您需要获取requestId

    String requestId = resp.getBody().getRequestId();
  7. 使用catch()处理报错。

    catch (Exception e) {
        e.printStackTrace();
    }

执行结果

全部返回信息如下所示:

{
  "TotalCount": 2,
  "RequestId": "27716AAC-5E4C-575F-BCF9-DB215E1CA0EB",
  "OfficeSites": [
    {
      "CloudBoxOfficeSite": false,
      "TotalEdsCountForGroup": 0,
      "CidrBlock": "192.168.100.0/24",
      "AdHostname": "izp323uuw9q****",
      "EnableServiceRoute": false,
      "DnsAddress": [
        "172.16.XX.XX"
      ],
      "Name": "DemoAD_01",
      "DesktopCount": 0,
      "NeedVerifyZeroDevice": false,
      "SubDnsAddress": [],
      "OuName": "wayne01.shanghai/WayneTestOU",
      "SubnetMode": "Auto",
      "CenAttachStatus": "attached",
      "EnableInternetAccess": true,
      "NmVersion": "DEFAULT",
      "Status": "REGISTERED",
      "DomainName": "wayne01.shanghai",
      "TotalEdsCount": 0,
      "VSwitchIds": [],
      "RdsLicenseStatus": "Disabled",
      "EnableAdminAccess": true,
      "OfficeSiteType": "AD_CONNECTOR",
      "FileSystemIds": [],
      "SsoEnabled": false,
      "Logs": [
        {
          "Message": "CreateConnector.Success",
          "Level": "INFO",
          "Step": "CREATE_CONNECTOR",
          "TimeStamp": "2024-10-24T02:45Z"
        },
        {
          "Message": "ConnectorStatus.NotReady",
          "Level": "WARN",
          "Step": "WAIT_CONNECTOR_ACTIVE",
          "TimeStamp": "2024-10-24T02:45Z"
        },
        {
          "Message": "ConnectorStatus.Ready",
          "Level": "INFO",
          "Step": "WAIT_CONNECTOR_ACTIVE",
          "TimeStamp": "2024-10-24T02:45Z"
        },
        {
          "Message": "CheckConnector.Success",
          "Level": "INFO",
          "Step": "CHECK_CONNECTOR",
          "TimeStamp": "2024-10-24T02:46Z"
        },
        {
          "Message": "WaitConnectorActive.Success",
          "Level": "INFO",
          "Step": "CONFIG_CONNECTOR",
          "TimeStamp": "2024-10-24T02:46Z"
        },
        {
          "Message": "User.Credential.Success",
          "Level": "INFO",
          "Step": "CONFIG_USER",
          "TimeStamp": "2024-10-24T05:48Z"
        },
        {
          "Message": "InvalidCredential",
          "Level": "ERROR",
          "Step": "CONFIG_USER",
          "TimeStamp": "2024-10-24T05:49Z"
        },
        {
          "Message": "User.Credential.Success",
          "Level": "INFO",
          "Step": "CONFIG_USER",
          "TimeStamp": "2024-10-24T05:50Z"
        },
        {
          "Message": "User.Credential.Success",
          "Level": "INFO",
          "Step": "CONFIG_USER",
          "TimeStamp": "2024-10-24T05:50Z"
        }
      ],
      "MfaEnabled": false,
      "OfficeSiteId": "cn-shanghai+dir-312783****",
      "VpcType": "standard",
      "VpcId": "vpc-uf6r0plvlj9l8u960****",
      "EnableCrossDesktopAccess": false,
      "ProtocolType": "ASP",
      "TotalResourceAmount": 0,
      "CreationTime": "2024-10-24T02:43Z",
      "CenId": "cen-6y8yiwkbf6n4ku****",
      "DesktopAccessType": "INTERNET",
      "ADConnectors": [
        {
          "ConnectorStatus": "RUNNING",
          "VSwitchId": "vsw-uf61s651owyd2civr****",
          "ADConnectorAddress": "192.168.XX.XX",
          "Specification": 1,
          "NetworkInterfaceId": "eni-uf6ie3truu4cly1v****"
        },
        {
          "ConnectorStatus": "RUNNING",
          "VSwitchId": "vsw-uf61s651owyd2civr****",
          "ADConnectorAddress": "192.168.XX.XX",
          "Specification": 1,
          "NetworkInterfaceId": "eni-uf61nhnfu3fzacp0****"
        }
      ],
      "DomainUserName": "ad-user"
    },
    {
      "CloudBoxOfficeSite": false,
      "TotalEdsCountForGroup": 0,
      "CidrBlock": "10.0.0.0/8",
      "EnableServiceRoute": false,
      "DnsAddress": [],
      "Name": "default",
      "DesktopCount": 0,
      "NeedVerifyZeroDevice": false,
      "SubDnsAddress": [],
      "OuName": "default",
      "SubnetMode": "Auto",
      "EnableInternetAccess": true,
      "NmVersion": "DEFAULT",
      "Status": "REGISTERED",
      "TotalEdsCount": 0,
      "VSwitchIds": [],
      "NeedVerifyLoginRisk": false,
      "RdsLicenseStatus": "Disabled",
      "EnableAdminAccess": false,
      "OfficeSiteType": "SIMPLE",
      "FileSystemIds": [],
      "SsoEnabled": false,
      "MfaEnabled": false,
      "SsoType": "NONE",
      "OfficeSiteId": "cn-shanghai+dir-121772****",
      "VpcType": "basic",
      "EnableCrossDesktopAccess": false,
      "TotalResourceAmount": 0,
      "CreationTime": "2024-03-26T03:01Z",
      "DesktopAccessType": "INTERNET",
      "ADConnectors": []
    }
  ]
}

完整示例代码

以下为本文示例的完整Java SDK代码。

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

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.ecd20200930.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.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/ecd
        config.endpoint = "ecd.cn-shanghai.aliyuncs.com";
        return new com.aliyun.ecd20200930.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.ecd20200930.Client client = Sample.createClient();
        com.aliyun.ecd20200930.models.DescribeOfficeSitesRequest describeOfficeSitesRequest = new com.aliyun.ecd20200930.models.DescribeOfficeSitesRequest()
                .setRegionId("cn-shanghai");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            com.aliyun.ecd20200930.models.DescribeOfficeSitesResponse resp = client.describeOfficeSitesWithOptions(describeOfficeSitesRequest, runtime);
            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
            
            String requestId = resp.getBody().getRequestId();
            System.out.println(requestId);
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }
}