您可使用阿里云提供的Java SDK,来调用数据服务的API,从而更便捷地获取指定数据。您可添加包含Maven依赖的SDK,也可下载安装包到本地直接安装。本文以调用基础API为例,介绍Java SDK调用API的方法及示例。

前提条件

已开通数据分析功能,更多信息,请参见管理与使用

安装SDK

  1. 安装Java开发环境。
    您可以从Java 官方网站下载,并按说明安装Java开发环境。
  2. 安装IoT Java SDK。
    1. 访问Apache Maven 官网下载Maven软件。
    2. 安装IoT Java SDK。
              <dependency>
                  <groupId>com.aliyun</groupId>
                  <artifactId>tea-openapi</artifactId>
                  <version>0.0.11</version>
              </dependency>
              <dependency>
                  <groupId>com.aliyun</groupId>
                  <artifactId>iot20180120</artifactId>
                  <version>1.1.0</version>
              </dependency>
              <!--以下依赖为非必须项,只为下文示例代码中JSON序列化输出结果使用-->
              <dependency>    
                  <groupId>com.alibaba</groupId>
                  <artifactId>fastjson</artifactId>
                   <version>1.2.61</version>
              </dependency>

发起调用

以下为调用数据服务下基础API历史至今设备数量相关统计的示例代码。您可参照参数说明,修改对应代码,调用指定的API。
注意 单个阿里云账号调用数据分析API的每秒请求数(QPS)最大限制为5。
import com.alibaba.fastjson.JSON;
import com.aliyun.iot20180120.Client;
import com.aliyun.iot20180120.models.*;
import com.aliyun.teaopenapi.models.Config;

public class JavaDemo {

    /**
     * 使用AccessKey ID和AccessKey Secret初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config();
        config.setAccessKeyId(accessKeyId);
        config.setAccessKeySecret(accessKeySecret);
        // 您的接入域名
        config.setEndpoint("iot.cn-shanghai.aliyuncs.com");
        return new Client(config);
    }

    public static void main(String[] args_) throws Exception {
        // 您的AccessKey ID和AccessKey Secret
        Client client = JavaDemo.createClient("LTAI4FyDFmKN************", "WF3onkl8cq3cTyVW8n************"));

        ListAnalyticsDataRequest request = new ListAnalyticsDataRequest();
        // 您的API Path
        request.setApiPath("/iot-cn-npk1v******/system/query/hist_dev_cnt_stat");
        // 您的API所在实例ID
        request.setIotInstanceId("iot-cn-npk1v******");
        //分页参数:页号
        request.setPageNum(1);
        //分页参数:页大小
        request.setPageSize(100);
        List<ListAnalyticsDataRequest.ListAnalyticsDataRequestCondition> conditions = new ArrayList<>();
        //您的业务相关的请求参数。Condition的配置说明,请参见下文的相关说明。
        ListAnalyticsDataRequest.ListAnalyticsDataRequestCondition condition = new ListAnalyticsDataRequest
                .ListAnalyticsDataRequestCondition();
        condition.setFieldName("__instance_id__");
        condition.setOperate("=");
        condition.setValue("iot-public");
        conditions.add(condition);

        ListAnalyticsDataRequest.ListAnalyticsDataRequestCondition condition1 = new ListAnalyticsDataRequest
                .ListAnalyticsDataRequestCondition();
        condition1.setFieldName("entityId");
        condition1.setOperate("=");
        condition1.setValue("all");
        conditions.add(condition1);

        ListAnalyticsDataRequest.ListAnalyticsDataRequestCondition condition2 = new ListAnalyticsDataRequest
                .ListAnalyticsDataRequestCondition();
        condition2.setFieldName("statDate");
        condition2.setOperate("=");
        condition2.setValue("20210221");
        conditions.add(condition2);

        request.setCondition(conditions);
        ListAnalyticsDataResponse listAnalyticsDataResponse = client.listAnalyticsData(request);
        System.out.println(JSON.toJSONString(listAnalyticsDataResponse));    
  }
}
  • 系统请求参数:
    名称 类型 是否必传 示例值 描述
    accessKeyId String LTAI4FyDFmKN************

    登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。

    说明 如果使用RAM用户,您需授予该RAM用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台
    accessKeySecret String WF3onkl8cq3cTyVW8n************
    Endpoint String iot.cn-shanghai.aliyuncs.com 调用云服务的接入地址。物联网平台的接入地址格式:iot.${RegionId}.aliyuncs.com。其中,变量${RegionId}需替换为您的物联网平台服务的地域代码。阿里云地域代码,请参见地域和可用区

    接入地址示例:

    • 华东2(上海):iot.cn-shanghai.aliyuncs.com
    • 新加坡:iot.ap-southeast-1.aliyuncs.com
    • 美国(硅谷):iot.us-west-1.aliyuncs.com
    • 日本(东京):iot.ap-northeast-1.aliyuncs.com
    • 德国(法兰克福):iot.eu-central-1.aliyuncs.com
    apiPath String /iot-cn-npk1v******/system/query/hist_dev_cnt_stat API路径。在数据服务的API列表下,单击API对应的查看,进入API详情页,可查看API Path的值。更多信息,请参见操作步骤
    iotInstanceId String iot-cn-npk1u****** API所在的实例ID。
    pageNum Integer 开启分页时必传 10 分页的页码。
    pageSize Integer 开启分页时必传 100 每页显示结果的条数,最大值为100。
  • 业务相关的请求参数:
    名称 类型 是否必传 说明 相关代码
    FieldName String 请求参数名称。
     condition.setFieldName("entityId");
    Operate String 请求参数对应的操作符。可选:
    • =:指定请求参数为特定值。
    • BETWEEN:指定请求参数为特定范围。
    • IN:指定请求参数为多个值。
    • !=:指定请求参数不可为特定值。
     condition.setOperate("=");
    Value String 请求参数的赋值。
    注意 当操作符为非BETWEEN时,该参数必传。
     condition.setValue("all");
    BetweenStart String 请求参数表示范围时的起始值。
    注意 当操作符为BETWEEN时,该参数必传。
     condition.setBetweenStart("0");
    BetweenEnd String 请求参数表示范围时的终止值。
    注意 当操作符为BETWEEN时,该参数必传。
    condition.setBetweenEnd("100");

    一个请求参数对应一个condition。在API详情页,查看API的请求参数,您可配置指定数量的condition关于如何查看API请求参数的信息,请参见操作步骤

    本文示例代码中,该API有3个请求参数__instance_id__entityIdstatDate分别对应condition condition 1condition 2

运行结果

  • 成功:

    在对应API的详情页,您可查看返回参数的详细说明。具体操作,请参见管理与使用

    以下示例为调用API成功后的结果,即:从2021年2月21日起至调用API时,公共实例下的设备数量相关统计情况。

    {
        "body": {
            "data": {
                "hasNext": false,
                "pageNum": 1,
                "pageSize": 100,
                "resultJson": "[{\"statDate\":\"20210221\",\"actDevCnt\":2942,\"onlineDevCntCompare\":0.00,\"livelyDevCntCompare\":8.99,\"livelyDevCnt\":1527,\"onlineDevRate\":23.08,\"crtDevCnt\":169025,\"livelyDevRate\":51.90,\"crtDevCntCompare\":0.08,\"onlineDevCnt\":679,\"actDevRate\":1.74,\"actDevCntCompare\":4.55}]"
            },
            "requestId": "6B78B8DB-EBDB-4451-BE30-893714******",
            "success": true
        },
        "headers": {
            "access-control-allow-origin": "*",
            "date": "Mon, 15 Mar 2021 07:24:01 GMT",
            "content-length": "425",
            "access-control-max-age": "172800",
            "x-acs-request-id": "6B78B8DB-EBDB-4451-BE30-893714******",
            "access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
            "connection": "keep-alive",
            "content-type": "application/json;charset=utf-8",
            "access-control-allow-methods": "POST, GET, OPTIONS"
        }
    }
  • 失败:

    通过调用失败结果中的错误码,您可了解失败的原因。关于错误码更多信息,请参见错误码

    以下示例为调用API失败后的结果,即:参数__instance_idd__为无效的请求参数,将其更正为__instance_id__后,重新发起调用。

    Java调用失败