背景
基于安全性的考虑,智能数据助理使用到的数据,有时企业不希望迁移到公有云上,需要能够访问到企业内部的数据。本文提出通过http(s)的方式接入企业数据,满足企业安全性的要求。
调用流程
通过http(s)接口,实现离线T+1的数据Schema同步,以及指标的实时在线查询。
http(s)服务接口
1.Schema查询
http(s)://{custom-url}/ding-talk/schemaInfo?tableCode={table_code}
其中:
custom-url:客户的服务地址,如xxx.com:8080
table_code:对应的数据实体名称(或数据库表名),具有唯一性
返回结果示例:
{
"tableAlias": "super销售数据", //数据表中文名,必填
"tableCode": "super_sales_data", //数据表code,必填且不可与当前已有元数据重复
"timeFieldCode": null, //时间字段,若没有时间字段可以为null,若有则格式必须为yyyyMMdd
"fields": [
{
"code": "sales_amount", //字段code,必填
"alias": "销售金额", //字段名称,必填
"dataType": "Double", //字段数据类型,必填,可为String/Long/Double/Date/Datetime
"description": "", //字段说明,可为null
"type": "measure", //维度指标类型,可为measure/dimension
"valueFormat": "###,#", //数值格式
},
{
"code": "passenger_volume",
"alias": "客单价",
"dataType": "Double",
"description": "",
"type": "measure",
"valueFormat": "###,#",
},
{
"code": "store",
"alias": "店铺",
"dataType": "String",
"description": "店铺",
"type": "dimension",
"valueFormat": null,
}
]
}
2.维度查询
http(s)://{custom-url}/ding-talk/query?tableCode={table_code}&levels={dim1_name}[,{dim2_name}]
其中:
custom-url:客户的服务地址,如xxx.com:8080
table_code:应为企业内不重复的数据表名
dim*_*:为所需要查询的维度名,多个维度以逗号分隔
例如请求店铺地址维度的枚举值:
https://xxx.com:8080/ding-talk/query?tableCode=table_abc&levels=店铺
返回结果示例:
{
"data": [
{
"店铺": "湖北黄冈黄梅县人民大道专卖店"
},
{
"店铺": "湖北天门市元春街罗马商城专卖店"
},
……
]
}
3.指标查询
http(s)://{custom-url}/ding-talk/query?tableCode={table_code}&startDate=xxx&endDate=xxx
&measures=m1,m2[&dim1=val1,val2&dim2=val3..]
其中:
custom-url:客户的服务地址,如xxx.com:8080
table_code:应为企业内不重复的数据表名
measures:参数为一个或多个度量,以逗号分隔
dim*:参数为一个或多个维度,每个维度的多个维度值以逗号分隔
例如请求两天的销量数据:
https://xxx.com:8080/ding-talk/query?tableCode=table_abc&sstartDate=2020-04-01&endDate=2020-04-02&measures=销售金额
返回结果示例:
{
"data": [
{
"日期": "2020-04-01",
"线下-POS销量": "0",
"线上-云店": "0",
"线上-电商": "0"
},
{
"日期": "2020-04-02",
"线下-POS销量": "0",
"线上-云店": "0",
"线上-电商": "0"
}
],
"title": "销售金额",
"type": "折线图"
}
数据助理配置
1.配置界面
在智能数据助理-数据配置中,提供http的接入方式,具体配置界面如下:
其中,安全签名为企业自己随机生成的token,用于生成请求的签名,通知可以通过后台配置进行更新。
2.请求签名生成逻辑
请求地址需额外添加两个参数:timestamp(时间戳)与signature(请求签名)
timestamp:生成方式为请求发起的时间,如请求时间为:2020-08-14 00:50:45,则用时间戳参数为:1597337445
signature:生成方式为本次请求的签名,生成规则为:md5([请求所需参数按参数名字典序排序]+ timestamp +安全签名token)
例如,请求中包含4个参数:domain=财务领域,beginDate=2020-05,endDate=2020-06,measure=绩效地图,signature为:md5("2020-05","财务领域","2020-06","绩效地图","1597337445","fl8WoDmS")=b7743e06385d65239b0a04766f0ca548
3.举例
原始url:http://127.0.0.1/v1/ding-talk/report?domain=财务领域&beginDate=2020-05&endDate=2020-05&measure=绩效地图
签名后:http://127.0.0.1/v1/ding-talk/report?domain=财务领域&beginDate=2020-05&endDate=2020-05&measure=绩效地图×tamp=1597337445&signature=b7743e06385d65239b0a04766f0ca548