Http 数据上报API调用说明

使用说明

  • 1、Http版本统计原始数据上报接口和统计结果查询接口从v2.2.8版本起支持。
  • 2、如果您对API使用安全性有更高要求,可以在本接口的基础上额外增加数据加密或签名验证等处理流程。
  • 3、接口需要使用POST请求方式,并将请求参数以json字符串格式放入body中。
  • 4、如果您通过公网访问,请首先放开防火墙18101端口和4061端口的访问权限。
  • 5、Http接口服务地址为集群模式为每个lighthouse-ice服务部署地址(默认为集群每一台服务器),单机模式为当前节点地址。

Http受限于数据传输的特性,它的数据上报效率相对于JavaRPC要低,对于大批量的原始数据上报推荐您选择JavaSDK(后续xl-lighthouse会提供c语言和go语言版本的sdk)。Http上报方案的优势在于接入比较简单灵活,适合中小业务接入(一般来说每秒上报3~5万条原始消息内的业务,Http请求方式都足以支撑), 如果您选择Http,建议您使用Http批量上报接口。

  • 单条消息上报接口: http://10.206.6.31:18101/api/rpc/v1/stat
  • 批量消息上报接口:http://10.206.6.31:18101/api/rpc/v1/stats
  • 请求参数请使用JSON格式放入到请求包体中,只允许POST请求方式。
  • 请优先选用批量上报接口,批量上报接口一般每次http请求传输数据量在50k~100k之间较为适中,如果您每条消息平均约为100Byte,则建议您每次请求上报约500~1000条原始记录。每次传输数据量太大,容易导致网络阻塞,传输太小则会频繁建立Http连接,影响上报效率,您可以根据自身情况进行调整。
  • 范例代码请参考单元测试:com.dtstep.lighthouse.core.test.api.HttpStatTest

单条消息上报(不建议使用)

包体参数格式如下:

{
    "params": {
        "amount": "235.954",
        "biz": "Ac",
        "order_id": "O64fA6",
        "user_id": "CaKXwO"
    },
    "secretKey": "YEWU3tGjNQL1AevvC9FjNj9SCuvzpYPmLY5akKYz",
    "timestamp": 1729334972612,
    "token": "N4C:order_stat"
}

以下使用Java代码模拟Http单条消息上报接口的调用

@Test
    public void testStat() throws Exception {
        String apiUrl = "http://10.206.6.31:18101/api/rpc/v1/stat";
        long t = System.currentTimeMillis();
        for(int i=0;i<1676;i++){
            Map<String,Object> requestMap = new HashMap<>();
            requestMap.put("token","N4C:order_stat");
            requestMap.put("secretKey","YEWU3tGjNQL1AevvC9FjNj9SCuvzpYPmLY5akKYz");
            requestMap.put("timestamp",t);
            Map<String,Object> paramsMap = new HashMap<>();
            paramsMap.put("order_id", RandomID.id(6));
            paramsMap.put("biz", RandomID.id(2));
            paramsMap.put("user_id", RandomID.id(6));
            Double d = ThreadLocalRandom.current().nextDouble(1000);
            paramsMap.put("amount",String.format("%.3f", d));//防止上面随机数出现科学计数法
            requestMap.put("params",paramsMap);
            String requestParams = JsonUtil.toJSONString(requestMap);
            System.out.println("Send Params:" + JsonUtil.toJSONString(requestParams));
            String response = OkHttpUtil.post(apiUrl,requestParams);
            System.out.println("Send Index:" + i + ",response:" + response);
        }
        System.out.println("Send OK!");
    }

批量消息上报(推荐使用)

包体参数格式如下:

[{
    "params": {
        "amount": "959.589",
        "biz": "eR",
        "order_id": "ZqrGWY",
        "user_id": "f2ZWg3"
    },
    "secretKey": "YEWU3tGjNQL1AevvC9FjNj9SCuvzpYPmLY5akKYz",
    "timestamp": 1729335961033,
    "token": "N4C:order_stat"
}, {
    "params": {
        "amount": "96.575",
        "biz": "91",
        "order_id": "KlPtEZ",
        "user_id": "yqTv7t"
    },
    "secretKey": "YEWU3tGjNQL1AevvC9FjNj9SCuvzpYPmLY5akKYz",
    "timestamp": 1729335961033,
    "token": "N4C:order_stat"
}, {
    "params": {
        "amount": "868.763",
        "biz": "G6",
        "order_id": "A1tqqe",
        "user_id": "td6s5I"
    },
    "secretKey": "YEWU3tGjNQL1AevvC9FjNj9SCuvzpYPmLY5akKYz",
    "timestamp": 1729335961033,
    "token": "N4C:order_stat"
}]

以下使用Java代码模拟Http批量接口的调用

    @Test
    public void testStats() throws Exception{
        long t = System.currentTimeMillis();
        String apiUrl = "http://10.206.6.31:18101/api/rpc/v1/stats";
        for(int m=0;m<100;m++){
            List<Map<String,Object>> requestList = new ArrayList<>();
            for(int n=0;n<300;n++){
                Map<String,Object> requestMap = new HashMap<>();
                requestMap.put("token","N4C:order_stat");
                requestMap.put("secretKey","YEWU3tGjNQL1AevvC9FjNj9SCuvzpYPmLY5akKYz");
                requestMap.put("timestamp",t);
                Map<String,Object> paramsMap = new HashMap<>();
                paramsMap.put("order_id", RandomID.id(6));
                paramsMap.put("biz", RandomID.id(2));
                paramsMap.put("user_id", RandomID.id(6));
                Double d = ThreadLocalRandom.current().nextDouble(1000);
                paramsMap.put("amount",String.format("%.3f", d));//防止上面随机数出现科学计数法
                requestMap.put("params",paramsMap);
                requestList.add(requestMap);
            }
            String requestParams = JsonUtil.toJSONString(requestList);
            System.out.println("Send Params:" + JsonUtil.toJSONString(requestParams));
            String response = OkHttpUtil.post(apiUrl,requestParams);
            System.out.println("Send Index:" + m + ",response:" + response);
        }
        System.out.println("Send OK!");
    }

使用Postman模拟调用

XL-LightHouse

参数说明

startTime/endTime参数

查询数据的起止时间,请使用13位时间戳。

batchTime/batchList参数

系统按照统计项TimeParam参数划分统计周期,使用统计周期的开始时间作为统计周期的批次时间,在传递batchTime/batchList相关参数时,请使用13位时间戳。

比如:

  • 统计业务每分钟访问PV,则2024-05-02 13:15:00代表2024-05-02 13:15:00 至 2024-05-02 13:16:00的统计数据对应的批次时间。

  • 统计业务每2小时访问UV,则2024-05-02 14:00:00代表2024-05-02 14:00:00 至 2024-05-02 16:00:00的统计数据对应的批次时间。

  • 统计业务每天的订单量,则2024-05-02 00:00:00代表2024-05-02 00:00:00 至 2024-05-02 23:59:59的统计数据对应的批次时间。

dimensValue/dimensValueList参数

没有维度参数传null,多维度统计按照统计项维度配置使用分号分割。

比如:

  • 查询业务每天订单金额,
<stat-item title="每天_订单金额" stat="sum(amount)" />

该示例没有统计维度则传null。

  • 查询每个各省份订单金额。
<stat-item title="每天_各省份_订单金额" stat="sum(amount)" dimens="provinceId"/>

该示例维度参数为省份,请传省份参数信息,格式示例:10101 或 10102。

  • 查询每个省份各个业务线的订单金额,该示例为维度查询,请按照
<stat-item title="每天_各省份_各业务线_订单金额" stat="sum(amount)" dimens="provinceId;bizId"/>

该示例维度参数为省份和业务线,请按照provinceId;bizId的格式拼接维度参数,格式示例:10101;1 或 10102;2。

如果您在使用过程中有任何问题,请随时联系开发者!

results matching ""

    No results matching ""