1. 概述
1.1 版本
| FineBI 版本 | 功能变动 |
|---|---|
| 7.0.7 | - |
1.2 功能简介
本文讲解 FineBI 中「数据目录」搜索已发布的指标/维度/指标集信息查看与校验查询相关的 API 接口。
配合 FineDataLInk 支持将接口中的指标维度数据取出,并写入指定的数据库,方便用户在其他系统使用指标中心的数据。
1.3 前置条件
需要先将查询并调用的指标中心数据需要先发布到「数据目录」。为在数据目录中调用接口查询指标中心数据做准备。

2. 认证方式
获取接口信息前,需要先进行认证。推荐「摘要签名认证」,能提供更稳定的接口获取环境
本文演示测试接口属于临时环境,使用的是 JWT 认证
2.1 JWT认证
使用平台 JWT 认证产生的用户 Token ,有效期跟随登录有效期。
2.2 摘要签名认证
1)摘要算法采用 HMAC-SHA256 ,指标中心提供 secretKey ,使用BI平台的 username 和 secretKey 一起制作签名。
username:BI平台的登录用户名
Secret Key:超管在平台「管理系统>系统管理>指标服务」中点击「生成Key」即可获取。如下图所示:
注:该 Secret Key 仅超管有权限获取。

2)制作签名认证
签名生成:signature = HmacSHA256(用户名+随机数+时间戳, secretKey);使用base64编码
在 Headers 中添加 Authorization: HMAC-SHA256 signature={签名},identity={用户名},nonce={随机数},timestamp={时间戳}
示例:Authorization: HMAC-SHA256 signature=c4Q63zUQIXoBIwQQKq6jJpEZYD2DilQf/cYUS41MNqc=,identity=lucian,nonce=e7ec7bbc-5c8b-4076-a292-93165bd0ad0d,timestamp=1765334705601
制作签名的过程可参考:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.UUID;
public class SignatureDemo {
public static void main(String[] args) {
//修改为BI平台中的username
String identity = "qinghui";
//修改为对应的secretKey
String secretKey = "1bbe91b1-a39c-4742-9694-e126bcf9a3bd";
//Nonce,自动生成
String nonce = String.valueOf(UUID.randomUUID());
//时间戳,自动生成
String timestamp = String.valueOf(System.currentTimeMillis());
//待签名字符串
String stringToSign = identity + nonce + timestamp;
//签名
String signature = hmacSHA256(secretKey, stringToSign);
//拼出完整的Authorization
System.out.println("Authorization:\n" + "HMAC-SHA256 signature=" + signature + ",identity=" + identity + ",nonce=" + nonce + ",timestamp=" + timestamp);
}
/**
* 对字符串data进行HmacSHA256签名,以Base64的结果返回
*
* @param secretKey 签名密钥
* @param data 待签名字符串
*/
public static String hmacSHA256(String secretKey, String data) {
try {
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSha256.init(secretKeySpec);
byte[] hashBytes = hmacSha256.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(hashBytes);
} catch (Exception e) {
throw new RuntimeException("HmacSha error", e);
}
}
}
3. 接口信息
以下是发布到「数据目录」中的指标/维度资源调用接口:
| 类型 | 接口 | 描述 |
|---|---|---|
| 搜索数据资源 | 搜索资源 | 同数据目录搜索 |
| 查看指标语义信息 | 查看指标属性 | 同数据目录指标详情,包含基础信息、标签、扩展字段、计算口径等 |
| 查看指标血缘 | 同数据目录指标血缘 | |
| 查看相关维度 | 同数据目录指标相关维度 | |
| 查看维度语义信息 | 查看维度属性 | 同数据目录维度详情,包含基础信息、标签、扩展字段、计算口径等 |
| 查看维度血缘 | 同数据目录维度血缘 | |
| 查看相关指标 | 同数据目录维度相关指标 | |
| 查看维度值 | 查看维度值 | 同数据目录维度预览,支持分页、搜索 |
| 数据查询 | 获取指标的结果集 | 同数据目录指标维度数据校验 |
| 获取指标的查询sql | 获取直连查询SQL,了解指标查询的取数逻辑,方便进行数据校验以及性能调优 |
4. 错误码说明
响应失败部分场景会返回错误码信息,不同报错原因对应的错误码如下表所示:
| 报错原因 | 错误码 |
|---|---|
| 参数异常 | 61310024 |
| 指标不存在 | 61310111 |
| 指标无权限 | 61310112 |
| 指标未发布 | 61310119 |
| 维度不存在 | 61310113 |
| 维度无权限 | 61310114 |
| 维度未发布 | 61310120 |
5. FDL读取指标中心数据并落库
使用 FineDataLInk 将接口中的指标维度数据取出,并写入指定的数据库。其他系统即可直接使用指标中心的数据。数据库中取出的数据,如下图所示:
详情请参见文档:FineDataLink读取指标中心数据并落库

