1. 应用
1.1. 应用说明
应用针对某一场景创建,它由多个仪表盘组成。 应用包含了用户一次探索所需要的全部数据、图表以及关系模型,非常适合作为日常工作的一个封装概念。
1.1.1. 应用的定义
应用结构说明
字段 | 类型 | 描述 |
---|---|---|
id | LONG | 应用的 id |
title | STRING | 应用的标题 |
options | OBJECT | 应用的配置信息 |
options.dashboards | NUMBER 数组 | 此应用下的仪表盘 id 列表 |
options.charts | NUMBER 数组 | 此应用下的图表 id 列表 |
options.datasets | NUMBER 数组 | 此应用下的数据集 id 列表 |
options.dashboardsOrder | NUMBER 数组 | 此应用下的仪表盘的显示顺序 |
options.enableAppRule | BOOL | 是否启用行权限控制 |
options.publishConfig | OBJECT | 此应用的发布设置,只在发布的应用中启用 |
options.publishConfig.publishTitle | STRING | 发布的应用标题 |
options.publishConfig.publisher | STRING | 发布的用户名 |
options.publishConfig.coverImageId | NUMBER | 发布的应用的封面图片 id |
options.publishConfig.watermarkImageId | NUMBER | 发布的应用的水印图片 id |
options.publishConfig.duplicatedPermitted | BOOL | 发布的应用是否允许复制数据集 |
options.publishConfig.showDetailPermitted | BOOL | 只读模式下访问应用是否允许显示详情 |
options.publishConfig.downloadPermitted | BOOL | 只读模式下访问应用是否允许下载数据 |
options.publishConfig.zoomInPermitted | BOOL | 只读模式下访问应用是否下钻 |
options.publishConfig.targetFolderId | LONG | 发布的目录 id |
options.publishConfig.description | STRING | 发布应用描述 |
options.publishConfig.foldersTitle | STRING 数组 | 发布的目录路径名称 |
options.publishConfig.publisherDisplayConfig | OBJECT | 此应用的发布者显示配置 |
options.publishConfig.publisherDisplayConfig.id | LONG | 发布者 id |
options.publishConfig.publisherDisplayConfig.type | STRING | 发布者类型 |
options.publishConfig.publisherDisplayConfig.name | STRING | 发布者名称 |
options.appTemplateUUID | STRING | 应用模版的 uuid,只在导入、导出模版用到,不存库 |
options.filters | OBJECT数组 | 全局过滤器列表 |
isPublish | BOOL | 应用是不是发布区的应用 |
publishHash | STRING | 应用发布的哈希值 |
publishedBy | NUMBER | 发布区应用的源应用 id |
folderId | LONG | 应用所在的文件夹 id |
area | STRING | 应用所在的区域,可选值参照area值说明 |
shareHash | STRING | 分享应用的哈希值 |
dataMode | STRING | 应用的数据权限,可选值参照dataMode 值说明 |
emailOptions | OBJECT | 邮件自动推送的设置 |
emailOptions.receiverList | OBJECT 数组 | 邮件自动推送的系统内收件人列表 |
emailOptions.receiverList[].id | INTEGER | 用户或者用户组或者组织机构id |
emailOptions.receiverList[].name | STRING | 对应的名称 |
emailOptions.receiverList[].receiverType | STRING | 收件人类型,见收件人类型 |
emailOptions.emailAddressList | STRING 数组 | 邮件自动推送的系统外收件人的邮件地址列表 |
emailOptions.dashboardList | OBJECT 数组 | 邮件自动推送的仪表盘列表 |
emailOptions.dashboardList[].id | INTEGER | 仪表盘id |
emailOptions.dashboardList[].appId | INTEGER | 仪表盘所属的应用Id |
emailOptions.dashboardList[].title | STRING | 仪表盘的标题 |
emailOptions.bodyWithImage | BOOLEAN | 邮件自动推送是否包含图片在邮件正文 |
emailOptions.attachmentType | STRING | 邮件自动推送附件类型,见邮件附件类型 |
emailOptions.compressAttachment | BOOL | 邮件自动推送附件是否打包压缩,默认是压缩,不压缩填false |
entityGroup | STRING | 邮件自动推送的执行计划类别,用于管理执行计划,固定为APP_EMAIL |
entityKey | STRING | 邮件自动推送的执行计划关键字,用于管理执行计划 |
execDetail | OBJECT | 创建邮件推送执行计划需要用到的任务描述信息,详见执行计划 |
refreshEntityGroup | STRING | 应用数据集刷新的执行计划类别,用于管理执行计划,固定为APP_REFRESH |
refreshExecDetail | OBJECT | 创建数据集刷新执行计划需要用到的任务描述信息,详见执行计划 |
hsVersion | INTEGER | 可选,本次编辑的版本号,从0开始,修改前先GET待修改资源获取当前版本号,修改时带上刚刚获取的版本号,服务端会检查并发冲突。不带版本号不检查并发冲突。 |
tenantId | LONG | 可选, 租户id |
type | STRING | 应用类型, 可选值参照appType值说明 |
defaultDataset | LONG | 可选,应用中用于做图的默认数据集 |
publishState | BOOL | 创作区的应用是否发布 |
收件人类型
字段值 | 描述 |
---|---|
USER | 用户 |
ORGANIZATION | 用户组 |
DEPARTMENT | 组织机构 |
邮件附件类型
字段值 | 描述 |
---|---|
PNG | png文件 |
pdf文件 | |
EXCEL | excel文件 |
area 值说明
字段值 | 描述 |
---|---|
PERSONAL_AREA | 应用创作区的个人区 |
PUBLIC_AREA | 应用创作区的共享区 |
DATA_MART | 数据集市 |
APP_MART | 应用集市 |
dataMode 值说明
字段值 | 描述 |
---|---|
APP_MODE | 应用作者 |
DATASET_MODE | 数据集作者 |
VIEWER_MODE | 使用者 |
appType 值说明
字段值 | 描述 |
---|---|
ANALYTIC_APP | 常用应用,用于分析场景 |
QUERY_APP | 查询应用,用于自助查询场景 |
DATA_APP | 数据包,用于数据集市区处理数据集 |
1.2. 接口说明
1.2.1. 创建应用
请求URL
POST /api/v1/apps
请求参数
request body 请求体
应用结构说明 | 字段 | 类型 | 描述 | |------------------------------------------|----------|-------------------------| | title | STRING | 应用的标题 | | folderId | LONG | 应用所在的文件夹 id, 应用创作共享空间的根目录 id 为 1, 数据集市的根目录 id 为 2 |
返回对象的格式说明
接口示例1 在应用创作区新建应用
- 请求
POST /api/v1/apps
{
"title": "应用名称",
"options": {
"dashboardsOrder": [],
"themes": {}
}
}
- 响应结果
{
"version": "3.2-SNAPSHOT@6929f52#8f8108f",
"code": 0,
"msg": "success",
"data": {
"id": 46176,
"title": "应用名称",
"options": {
"dashboardsOrder": []
},
"createdBy": 6,
"createdAt": "2020-06-03 17:30:27",
"updatedBy": 6,
"updatedAt": "2020-06-03 17:30:27",
"area": "PERSONAL_AREA",
"dataMode": "APP_MODE",
"publish": false,
"type": "ANALYTIC_APP"
}
}
接口示例2 在应用创作共享空间根目录下创建应用
- 请求
POST /api/v1/apps
{
"folderId": 1,
"title": "应用名称",
"options": {
"dashboardsOrder": [],
"themes": {}
}
}
接口示例3 在应用集市根目录下创建应用
- 请求
POST /api/v1/apps
{
"folderId": 2,
"title": "应用名称",
"options": {
"dashboardsOrder": [],
"themes": {}
}
}
接口示例4 在应用创作下创建自助查询应用
- 请求
POST /api/v1/apps
{
"title": "应用名称",
"options": {
"dashboardsOrder": [],
"themes": {}
},
"type": "QUERY_APP"
}
1.2.2. 查询应用
查询用户能看到的应用列表,在应用集市和应用创作区使用。
请求URL
GET /api/v1/apps
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
publish | BOOLEAN | 是 | 获取应用集市区应用时设置为 true,获取应用协作区应用时设置为 false |
orderBy | String | 否 | 排序字段 |
pOrCByCurrent | BOOLEAN | 否 | 应用集市区,查询 "我发布的" 应用时设置为 true, "发布给我的" 应用时设置为 false;应用协作区,查询"我协作的" 应用时设置为 true, "协作给我的" 应用时设置为 false |
createdByCurrent | BOOLEAN | 否 | 查询 "我创建的" 应用时设置为 true,"协作给我的" 应用时设置为false,用于应用创作区 |
showHide | BOOLEAN | 是 | 是否显示隐藏的应用,用于应用集市区 |
queryAll | BOOLEAN | 是 | 是否显示全部应用 |
返回对象的格式说明
接口示例1
请求
GET /api/v1/apps?pOrCByCurrent=false&offset=0&limit=20&orderBy=updatedAt&orderType=desc
响应结果
{
"version": "3.2-SNAPSHOT@b7c5a93#f76c1b6",
"code": 0,
"msg": "success",
"data": [
{
"id": 45806,
"title": "口罩专题分析",
"cover": "",
"options": {
"dashboards": [
1,
2,
3,
5
],
"datasets": [
1
],
"dashboardsOrder": [
1,
2,
3,
5
],
"appTemplateUUID": "c05b0590-4685-4d3e-ac32-6cace767360f"
},
"createdBy": 187,
"createdAt": "2020-05-09 10:48:59",
"updatedBy": 187,
"updatedAt": "2020-05-09 10:48:59",
"visible": true,
"hsVersion": 0,
"area": "PERSONAL_AREA",
"dataMode": "APP_MODE",
"accessCount": 6,
"creator": {
"id": 187,
"name": "qq420188456",
"email": "zhaojunli@hengshi.com"
},
"updater": {
"id": 187,
"name": "qq420188456",
"email": "zhaojunli@hengshi.com"
},
"collaborated": false,
"datasets": [
1
]
},
{
"id": 45648,
"title": "jlscreenshot",
"cover": "",
"options": {
"dashboards": [
1,
3,
2
],
"datasets": [
3,
2,
1
],
"dashboardsOrder": [
1,
2,
3
],
"enableAppRule": false
},
"createdBy": 187,
"createdAt": "2020-04-15 16:16:19",
"updatedBy": 187,
"updatedAt": "2020-04-24 14:15:44",
"visible": true,
"hsVersion": 4,
"area": "PERSONAL_AREA",
"dataMode": "APP_MODE",
"accessCount": 33,
"publishState": true,
"type": "ANALYTIC_APP",
"creator": {
"id": 187,
"name": "qq420188456",
"email": "zhaojunli@hengshi.com"
},
"updater": {
"id": 187,
"name": "qq420188456",
"email": "zhaojunli@hengshi.com"
},
"collaborated": false,
"datasets": [
3,
2,
1
]
}
],
"totalHits": 9,
"offset": 0
}
1.2.3. 根据ID查询应用
请求URL
GET /api/v1/apps/{appId}
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appId | INTEGER | 是 | 指定应用的 id |
返回对象的格式说明
接口示例1 查询 id 为 1 的应用
请求
GET /api/v1/apps/1
响应结果
{
"version": "3.2-SNAPSHOT@6929f52#8f8108f",
"code": 0,
"msg": "success",
"data": {
"id": 46176,
"title": "lala",
"cover": "",
"options": {
"dashboards": [
1
],
"datasets": [
1
],
"dashboardsOrder": [
1
],
"enableAppRule": false
},
"createdBy": 6,
"createdAt": "2020-06-03 17:30:27",
"updatedBy": 6,
"updatedAt": "2020-06-03 17:36:38",
"visible": true,
"isDelete": false,
"isPublish": false,
"hsVersion": 1,
"area": "PERSONAL_AREA",
"dataMode": "APP_MODE",
"publishState": false,
"type": "ANALYTIC_APP",
"creator": {
"id": 6,
"name": "***",
"email": "***",
"mobile": "***"
},
"action": "admin|read|write",
"datasets": [
1
],
"publish": false
}
}
1.2.4. 更新应用
请求URL
PUT /api/v1/apps/{appId}
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appId | INTEGER | 是 | 指定应用的 id |
request body 请求体
应用结构说明, 可以被修改的内容见下表:
字段 | 类型 | 描述 |
---|---|---|
title | STRING | 应用的标题 |
options.enableAppRule | BOOL | 是否启用行权限控制 |
options.publishConfig.showDetailPermitted | BOOL | 只读模式下访问应用是否允许显示详情 |
options.publishConfig.downloadPermitted | BOOL | 只读模式下访问应用是否允许下载数据 |
options.publishConfig.zoomInPermitted | BOOL | 只读模式下访问应用是否下钻 |
dataMode | STRING | 应用的数据权限,可选值参照dataMode 值说明 |
返回对象的格式说明
接口示例1 更新 id 为 1 的应用标题
- 请求
PUT /api/v1/apps/1
{
"title": "wewe",
"hsVersion": 1
}
接口示例2 启用 id 为 1 的应用行权限规则
- 请求
PUT /api/v1/apps/1
{
"dataMode": "APP_MODE",
"options": {
"dashboards": [
1,
2
],
"datasets": [
7
],
"dashboardsOrder": [
1,
2
],
"enableAppRule": true,
"publishConfig": {
"zoomInPermitted": true,
"showDetailPermitted": true,
"downloadPermitted": true,
"totalPages": {},
"duplicatedPermitted": false
}
},
"hsVersion": 1
}
1.2.5. 删除应用
请求URL
DELETE /api/v1/apps/{appId}
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appId | INTEGER | 是 | 指定应用的 id |
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
msg | STRING | 成功返回 success |
1.2.6. 运行图表获取数据
根据图表配置信息获取图表数据。
请求URL
POST /api/v1/apps/{appId}/chart-related-data
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
appId | NUMBER | 必填 |
Request Body 参数
图表的配置信息,详见图表结构说明
返回对象的格式说明
接口示例1
- 请求
POST /api/v1/apps/1/chart-data
{
"options": {
"axes": [
{
"op": "group",
"uid": "u_edbee8adba68e26a_0",
"kind": "function",
"args": [
{
"kind": "field",
"op": "region_name",
"dataset": 3
}
]
},
{
"op": "sum",
"uid": "u_9f886f9cb7bdf1d2_1",
"kind": "function",
"args": [
{
"kind": "field",
"op": "region_id",
"dataset": 3
}
]
}
]
}
}
- 响应结果
{
"data": {
"data": [
[
"Americas",
2
],
[
"Middle East and Africa",
4
],
[
"Asia",
3
],
[
"Europe",
1
]
],
"schema": [
{
"fieldName": "u_edbee8adba68e26a_0"
},
{
"fieldName": "u_9f886f9cb7bdf1d2_1"
}
]
}
}
1.2.7. 运行图表获取原始数据
根据图表配置信息获取图表用到的数据集的原始数据。
请求URL
POST /api/v1/apps/{appId}/chart-related-data
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
appId | NUMBER | 必填 |
Request Body 参数
图表的配置信息,详见图表结构说明
返回对象的格式说明
接口示例1
- 请求
POST /api/v1/apps/1/chart-related-data
{
"options": {
"axes": [
{
"op": "group",
"uid": "u_edbee8adba68e26a_0",
"kind": "function",
"args": [
{
"kind": "field",
"op": "region_name",
"dataset": 3
}
]
},
{
"op": "sum",
"uid": "u_9f886f9cb7bdf1d2_1",
"kind": "function",
"args": [
{
"kind": "field",
"op": "region_id",
"dataset": 3
}
]
}
],
"fieldsPolicy": "AXES_ALL"
}
}
- 响应结果
{
"data": [
{
"data": [
[
1,
"Europe"
],
[
2,
"Americas"
],
[
3,
"Asia"
],
[
4,
"Middle East and Africa"
]
],
"schema": [
{
"fieldName": "region_id",
"type": "number",
"label": "region_id"
},
{
"fieldName": "region_name",
"type": "string",
"label": "region_name"
}
],
"layer": "a_ivt_regions"
}
]
}
1.2.8. 导出应用模版
把当前应用导出为 Json 模版文件。
请求URL
GET /api/v1/apps/{appId}/export-template
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
appId | NUMBER | 必填 |
返回对象的格式说明
返回的是JSON文件,包括应用、仪表盘、图表、数据集、关联模型的配置信息。
接口示例1
- 请求
GET /api/v1/apps/{appId}/export-template
- 响应结果 参照文件 app_template.json
1.2.9. 导入应用模版
导入 Json 模版文件创建新的应用。
请求URL
POST /api/v1/apps/import-template
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
folderId | NUMBER | 可选, 文件夹id,如果为空,就导入个人区 |
file | BINARY | 必填, 模版文件流 |
返回对象的格式说明
返回新生成的应用信息,详情见####应用结构说明
接口示例1
- 请求
POST /api/v1/apps/import-template
- 请求参数
folderId: 1234
file: (binary)
- 响应结果
{
"version": "2.6-SNAPSHOT@079a626#c39468b",
"code": 0,
"msg": "success",
"data": {
"id": 26554,
"title": "访问统计 (1)",
"cover": "",
"options": {
"dashboardsOrder": [
1
],
"appTemplateUUID": "494e4576-03ae-4901-8ea5-5f7539a3763b"
},
"createdBy": 89,
"createdAt": "2019-12-16 17:58:10",
"updatedBy": 89,
"updatedAt": "2019-12-16 17:58:10",
"visible": true,
"isDelete": false,
"hsVersion": 0,
"publish": false,
"publicPublish": false
}
}
1.2.10. 分页查询回收站中的应用
查询不同区域下回收站中的应用
请求URL
GET /api/v1/list-trash
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
area | 枚举 | 可选,有效值参照area值说明,默认是 PERSONAL_AREA |
orderBy | STRING | 可选,排序字段,默认是按照更新时间降序排序 |
orderType | STRING | 可选,排序类型,asc - 表示升序,desc - 表示降序 |
limit | NUMBER | 可选,单页限制条数,默认是10 |
offset | NUMBER | 可选,页数偏移量,默认是0 |
返回对象的格式说明
app对象的数组。
接口示例1
- 请求
GET /api/v1/list-trash?area=PERSONAL_AREA
- 响应结果
{
"version": "2.7-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success",
"data": {
"offset": 0,
"totalHits": 127,
"data": [
{
"id": 327,
"title": "新建应用2 (9)",
"cover": "",
"options": {
"dashboardsOrder": [
1,
2
]
},
"createdBy": 1,
"createdAt": "2019-08-20 16:20:56",
"updatedBy": 1,
"updatedAt": "2019-12-17 17:47:30",
"visible": true,
"isDelete": true,
"hsVersion": 4,
"area": "PERSONAL_AREA",
"publish": false,
"publicPublish": false
}
]
}
}
1.2.11. 恢复回收站中的应用
恢复回收站中的应用
请求URL
POST /api/v1/apps/{appId}/restore
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
appId | INTEGER | 指定要恢复的应用 id |
接口示例1
- 请求
POST /api/v1/apps/1664/restore
- 响应结果
{
"version": "2.7-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success",
"data": 1
}
1.2.12. 彻底删除回收站中的应用
彻底删除回收站中的应用
请求URL
POST /api/v1/apps/{appId}/prune
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
appId | INTEGER | 指定要恢复的应用 id |
接口示例1
- 请求
POST /api/v1/apps/1664/prune
- 响应结果
{
"version": "2.7-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success",
"data": 1
}
1.2.13. 在当前app下用HE 查询数据
在当前app下用 HE 语句查询数据
请求URL
POST /api/v1/apps/{appId}/query
URL 请求参数
| appId | NUMBER | 必填,应用的 id | | limit | NUMBER | 可选,返回记录的最大条数,默认是1000 | | offset | NUMBER | 可选,返回第几页数据,默认是0 |
Request Body 参数
HE 表达式,详情参照HE 的数据集函数
返回对象的格式说明
参考示例
- 请求
POST /api/v1/apps/1/query
- Request Body 参数
{
"kind": "formula",
"op": "summarize(dataset(1), {type}, sum({votes}) as 'sum1')"
}
- 响应结果
{
"version": "2.7-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success",
"data": {
"data": [
[
"喜剧",
16.5
],
[
"动画",
16.6
]
],
"schema": [
{
"fieldName": "type",
"visible": true,
"nativeType": "text"
},
{
"fieldName": "sum1",
"visible": true,
"nativeType": "numeric"
}
]
}
}
1.2.14. 批量隐藏 & 排序仪表盘
批量隐藏 & 排序仪表盘
请求URL
PUT /api/v1/apps/{appId}/update-dashbords-order-hide
请求参数
Request Body 参数
{
"options": {
"dashboardsOrder": [
1,
2,
3
]
},
"resourceBatchUpdateDtos": [
{
"ids": [
1
],
"pathAndValues": [
{
"path": [
"hide"
],
"value": false
}
]
},
{
"ids": [
2,
3
],
"pathAndValues": [
{
"path": [
"hide"
],
"value": true
}
]
}
]
}
接口示例1
- 请求
PUT /api/v1/apps/{appId}/update-dashbords-order-hide
- 请求体
{
"options": {
"dashboardsOrder": [
1,
2,
3
]
},
"resourceBatchUpdateDtos": [
{
"ids": [
1
],
"pathAndValues": [
{
"path": [
"hide"
],
"value": false
}
]
},
{
"ids": [
2,
3
],
"pathAndValues": [
{
"path": [
"hide"
],
"value": true
}
]
}
],
"hsVersion": 5
}
- 响应结果
{
"version": "3.2-SNAPSHOT@f8dc947#95a976a",
"code": 0,
"msg": "success",
"data": {
"id": 45821,
"title": "hideDashbaord",
"cover": "",
"options": {
"dashboardsOrder": [
1,
2,
3
],
"enableAppRule": false
},
"createdBy": 8,
"createdAt": "2020-05-13 14:16:58",
"updatedBy": 8,
"updatedAt": "2020-05-13 14:39:14",
"visible": true,
"isDelete": false,
"hsVersion": 6,
"area": "PERSONAL_AREA",
"dataMode": "APP_MODE",
"publish": false
}
}
1.2.15. 上传封面
请求URL
PUT /api/v1/apps/{appId}/cover
请求参数
Request Body 参数
表单数据
后端API请求代码样例
@Test
public void uploadTest()throws Exception{
SimpleClientHttpRequestFactory simpleClientHttpRequestFactory=new SimpleClientHttpRequestFactory();
simpleClientHttpRequestFactory.setConnectTimeout(15000);
simpleClientHttpRequestFactory.setReadTimeout(5000);
RestTemplate restTemplate=new RestTemplate(simpleClientHttpRequestFactory);
HttpHeaders headers=new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.set("Cookie","csrf=142b7fd3-2cbf-4caa-ace5-480ad9871623; sid=3aadc6f7-67ea-49d7-8ec1-de4bb7ef673b");
headers.set("X-CSRF-Token","142b7fd3-2cbf-4caa-ace5-480ad9871623");
String url="http://localhost:9981/api/apps/47/cover";
FileSystemResource fileSystemResource=new FileSystemResource("/Users/hengshi/Documents/a.jpg");
MultiValueMap<String, Object> form=new LinkedMultiValueMap<>();
form.add("file",fileSystemResource);
form.add("filename","a.jpg");
HttpEntity<MultiValueMap<String, Object>>files=new HttpEntity<>(form,headers);
String s=restTemplate.postForObject(url,files,String.class);
}
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | INTEGER | 图片的 id |
1.2.16. 上传水印
请求URL
PUT /api/v1/apps/{appId}/watermark
请求参数
Request Body 参数
表单数据
后端API请求代码样例
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | INTEGER | 图片的 id |
1.2.17. 发布应用
请求URL
POST /api/v1/apps/{appId}/publish
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
应用结构说明,只涉及到 options.publishConfig 实体
返回对象的格式说明
接口示例1 在应用创作区新建应用
- 请求
POST /api/v1/apps/1/publish
{
"targetFolderId": 2805,
"targetArea": "SYSTEM_PORTAL",
"options": {
"publishConfig": {
"publishTitle": "0529-3.1-app",
"publisher": "trial",
"coverImageId": 102,
"watermarkImageId": 103,
"zoomInPermitted": true,
"showDetailPermitted": true,
"downloadPermitted": true,
"duplicatedPermitted": true,
"targetFolderId": 1,
"description": "app description",
"foldersTitle": [
"公共空间",
"文件夹"
],
"publisherDisplayConfig": {
"id": 123,
"type": "user",
"name": "trial"
}
}
}
- 响应结果
{
"version": "",
"code": 0,
"msg": "success",
"data": {
"id": 43421,
"title": "publish app",
"options": {
"dashboards": [
1
],
"datasets": [
],
"dashboardsOrder": [
1
],
"publishConfig": {
"zoomInPermitted": false,
"showDetailPermitted": true,
"downloadPermitted": true,
"publishTitle": "publish app",
"publisher": "trial",
"totalPages": {
},
"duplicatedPermitted": true,
"publisherDisplayConfig": {
"id": 1337,
"type": "user",
"name": "trial"
},
"targetFolderId": 263,
"foldersTitle": [
"公共空间",
"文件夹"
],
"displayPublisher": true
},
"enableAppRule": false,
"enableRuleStrictValidate": false,
"pagination": {
"applyToDashboards": [
1,
1
]
},
"source": "PERSONAL_AREA",
"devices": {
"pc": true,
"mobile": false
},
"resultCacheInterval": 3600
},
"createdBy": 1337,
"createdAt": "2022-12-29 15:30:58",
"updatedBy": 1337,
"updatedAt": "2022-12-29 15:30:58",
"isDelete": false,
"isPublish": true,
"publishHash": "EB086EF1566A844FFF077D40742C9821B",
"publishedBy": 41589,
"datasets": [
],
"refreshEntityGroup": "APP_REFRESH",
"entityKey": "43421",
"entityGroup": "APP_EMAIL"
}
}
1.2.18. 取消发布
取消发布
请求URL
DELETE /api/v1/apps/{appId}/publish/cancel
请求参数
无
request body 参数
无
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
说明
该操作只能由应用的创建者执行
接口示例1: 取消发布
DELETE /api/v1/apps/{appId}/publish/cancel
返回
{
"version": "3.2-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success"
}
1.2.19. 查看应用中使用的数据连接
请求URL
GET /api/v1/apps/{appId}/connection-replace
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
返回对象的格式说明
返回对象是dataset list,每个dataset里带有connection的信息。
字段 | 类型 | 描述 |
---|---|---|
id | NUMBER | 数据集的 id |
options.connectionId | NUMBER | 数据连接的 id |
options.connectionTitle | NUMBER | 数据连接的标题 |
options.origin | STRING | 数据连接的类型 |
接口示例1 列出应用 1 中图表所用到的所有数据连接
请求
GET /api/v1/apps/1/connection-replace
响应结果
{
"version": "3.3-SNAPSHOT@@git.commit.id.abbrev@#8500a3e",
"code": 0,
"msg": "success",
"data": [
{
"id": 1,
"options": {
"connectionTitle": "testuserattr",
"connectionId": 4197,
"origin": "postgresql"
}
}
]
}
1.2.20. 替换应用中使用的数据连接
请求URL
POST /api/v1/apps/{appId}/connection-replace
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
现在使用的数据连接 id 和要替换的数据连接 id 对应关系的列表。例如:[{"current":4197,"replace":4122}]
返回对象的格式说明
字段 | 类型 | 描述 |
---|---|---|
msg | STRING | 执行成功返回 success |
接口示例1 替换应用 1 中图表所用到的一个数据连接
- 请求
POST /api/v1/apps/1/connection-replace
[
{
"current": 4197,
"replace": 4122
}
]
- 响应结果
{
"version": "3.2-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success"
}
1.2.21. 查看应用中使用的数据包
请求URL
GET /api/v1/apps/{appId}/dataapp-replace
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
返回对象的格式说明
字段 | 类型 | 描述 |
---|---|---|
id | NUMBER | 应用的 id |
title | STRING | 应用的标题 |
area | STRING | 应用所在的区域,可选值参照area值说明 |
parents | OBJECT 数组 | 应用所在的文件夹列表,顺序是从外层目录到里层目录 |
parents.[].id | NUMBER | 文件夹的id |
parents.[].title | STRING | 文件夹的标题 |
parents.[].area | STRING | 文件夹所在的区域 |
接口示例1 列出应用 1 中图表所用到的所有数据包
请求
GET /api/v1/apps/1/dataapp-replace
响应结果
{
"version": "3.2-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success",
"data": [
{
"id": 3376,
"title": "新建数据包 (2)",
"area": "DATA_MART",
"parents": [
{
"id": 2,
"title": "data_mart_root_folder",
"options": {
"rootType": "PUBLIC_ROOT_FOLDER"
},
"isDelete": false,
"area": "DATA_MART"
}
]
},
{
"id": 3378,
"title": "数据包过滤 (2)",
"area": "PERSONAL_AREA"
}
]
}
1.2.22. 替换应用中使用的数据包
请求URL
POST /api/v1/apps/{appId}/dataapp-replace
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
现在使用的数据包 id 和要替换的数据包 id 对应关系的列表。例如:[{"current":3376,"replace":154}]
返回对象的格式说明
字段 | 类型 | 描述 |
---|---|---|
msg | STRING | 执行成功返回 success |
接口示例1 替换应用 1 中图表所用到的一个数据包
- 请求
POST /api/v1/apps/1/dataapp-replace
[
{
"current": 3376,
"replace": 154
}
]
- 响应结果
{
"version": "3.2-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success"
}
1.2.23. 全部禁用应用中的单个数据集更新计划
请求URL
POST /api/apps/{appId}/disable-all-dataset-schedule
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
字段 | 类型 | 描述 |
---|---|---|
返回对象的格式说明
字段 | 类型 | 描述 |
---|---|---|
msg | STRING | 执行成功返回 success |
接口示例1 禁用app id为1的所有单个数据集更新计划
- 请求
POST /api/apps/1/disable-all-dataset-schedule
{}
- 响应结果
{
"version": "3.5-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success"
}
1.2.24. 应用刷新时排除这个数据集
请求URL
POST /api/apps/{appId}/exclude-in-app-refresh
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
字段 | 类型 | 描述 |
---|---|---|
entityKey | STRING | 被排除的数据集的执行计划的entityKey,不包含这个字段,表示全部 |
返回对象的格式说明
字段 | 类型 | 描述 |
---|---|---|
msg | STRING | 执行成功返回 success |
接口示例1 禁用app id为1的所有单个数据集更新计划
- 请求
POST /api/apps/1/exclude-in-app-refresh
{
"entityKey": "1-1"
}
- 响应结果
{
"version": "3.5-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success"
}
1.2.25. 应用刷新时包含这个数据集
请求URL
POST /api/apps/{appId}/include-in-app-refresh
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
字段 | 类型 | 描述 |
---|---|---|
entityKey | STRING | 被包含的数据集的执行计划的entityKey,不包含这个字段,表示全部 |
返回对象的格式说明
字段 | 类型 | 描述 |
---|---|---|
msg | STRING | 执行成功返回 success |
接口示例1 禁用app id为1的所有单个数据集更新计划
- 请求
POST /api/apps/1/include-in-app-refresh
{
"entityKey": "1-1"
}
- 响应结果
{
"version": "3.5-SNAPSHOT@@git.commit.id.abbrev@#null",
"code": 0,
"msg": "success"
}
1.2.26. 查询应用中单个数据的执行计划列表
请求URL
GET /api/apps/{appId}/dataset-schedules
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appId | INTEGER | 是 | 应用的 id |
includeInAppScope | BOOL | 可选 | 本dataset是否包括在app scope刷新中 |
q | STRING | 可选 | 搜索关键字 |
返回对象的格式说明
和查询执行计划列表 返回数据一致,多一个字段:
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
includeInAppScope | BOOL | 可选 | 本dataset是否包括在app scope刷新中 |
接口示例1
请求
GET /api/apps/1/dataset-schedules
响应结果
{
"code": 0,
"data": [
{
"id": 1,
"entityGroup": "DATASET",
"entityKey": "1-1",
"enabled": false,
"planItems": [
{
"id": 1,
"triggerType": "CRON_JOB",
"cronDesc": "0 15 0 ? * 1",
"cronType": "WEEKLY",
"timeZone": "GMT+08:00"
},
{
"id": 2,
"triggerType": "CRON_JOB",
"cronDesc": "*/30 * * * * ?",
"cronType": "CRON",
"timeZone": "GMT+08:00"
}
],
"execDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.DatasetJob",
"jobParams": {
"app": 1,
"dataset": 1
},
"retryTimes": 1
},
"title": "dataset1",
"createdAt": "2020-03-05 15:01:02",
"createdBy": 1,
"updatedAt": "2020-03-05 15:01:02",
"updatedBy": 1
}
],
"msg": "success",
"version": "3.5-SNAPSHOT@@git.commit.id.abbrev@#1234567",
"totalHits": 1,
"offset": 0
}
1.2.27. 查询应用刷新的执行计划
请求URL
GET /api/apps/{appId}/refresh-schedule
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appId | INTEGER | 是 | 应用的 id |
返回对象的格式说明
和查询执行计划列表 返回数据一致,只有一个执行计划object
接口示例1
请求
GET /api/apps/1/refresh-schedule
响应结果
{
"code": 0,
"data": {
"id": 1,
"entityGroup": "APP_REFRESH",
"entityKey": "1",
"enabled": false,
"planItems": [
{
"id": 1,
"triggerType": "CRON_JOB",
"cronDesc": "0 15 0 ? * 1",
"cronType": "WEEKLY",
"timeZone": "GMT+08:00"
},
{
"id": 2,
"triggerType": "CRON_JOB",
"cronDesc": "*/30 * * * * ?",
"cronType": "CRON",
"timeZone": "GMT+08:00"
}
],
"execDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.AppDatasetRefreshJob",
"jobParams": {
"app": 1
},
"retryTimes": 1
},
"title": "app1",
"createdAt": "2020-03-05 15:01:02",
"createdBy": 1,
"updatedAt": "2020-03-05 15:01:02",
"updatedBy": 1
},
"msg": "success",
"version": "3.5-SNAPSHOT@@git.commit.id.abbrev@#1234567",
"totalHits": 1,
"offset": 0
}
1.2.28. 创建自助查询应用的用户设置
请求URL
GET /api/apps/{appId}/profiles
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appId | INTEGER | 是 | 应用的 id |
返回对象的格式说明
和查询执行计划列表 返回数据一致,只有一个执行计划object
接口示例1
请求
GET /api/apps/1/refresh-schedule
响应结果
{
"code": 0,
"data": {
"id": 1,
"entityGroup": "APP_REFRESH",
"entityKey": "1",
"enabled": false,
"planItems": [
{
"id": 1,
"triggerType": "CRON_JOB",
"cronDesc": "0 15 0 ? * 1",
"cronType": "WEEKLY",
"timeZone": "GMT+08:00"
},
{
"id": 2,
"triggerType": "CRON_JOB",
"cronDesc": "*/30 * * * * ?",
"cronType": "CRON",
"timeZone": "GMT+08:00"
}
],
"execDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.AppDatasetRefreshJob",
"jobParams": {
"app": 1
},
"retryTimes": 1
},
"title": "app1",
"createdAt": "2020-03-05 15:01:02",
"createdBy": 1,
"updatedAt": "2020-03-05 15:01:02",
"updatedBy": 1
},
"msg": "success",
"version": "3.5-SNAPSHOT@@git.commit.id.abbrev@#1234567",
"totalHits": 1,
"offset": 0
}
1.2.29. 复制应用
请求URL
POST /api/apps/{appId}/duplicate
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
字段 | 类型 | 描述 |
---|---|---|
targetFolderId | LONG | 复制到目录的id,不包含这个字段,表示和源应用同一目录 |
title | String | 新应用名称,可不传 |
返回对象的格式说明
接口示例1 在应用创作区创建应用副本
请求
POST /api/apps/1/duplicate
响应结果
{
"version": "",
"code": 0,
"msg": "success",
"data": {
"id": 43417,
"title": "duplicate app",
"cover": "",
"options": {
"dashboards": [
1
],
"datasets": [
],
"dashboardsOrder": [
1
],
"enableAppRule": false,
"enableRuleStrictValidate": false,
"pagination": {
"applyToDashboards": [
1,
1
]
},
"devices": {
"pc": true,
"mobile": false
},
"resultCacheInterval": 3600
},
"createdBy": 1337,
"createdAt": "2022-12-29 15:24:18",
"updatedBy": 1337,
"updatedAt": "2022-12-29 15:24:18",
"visible": true,
"isDelete": false,
"isPublish": false,
"isBackup": false,
"folderId": 0,
"area": "PERSONAL_AREA",
"dataMode": "APP_MODE",
"emailOptions": {
},
"type": "ANALYTIC_APP",
"datasets": [
],
"publishState": false
}
}
接口示例2 在应用集市区使用模版新建应用
- 请求
POST /api/apps/2/duplicate
- 响应结果
和接口示例1返回数据一致
接口示例3 在应用创作区将应用复制到指定目录下
- 请求
POST /api/apps/3/duplicate
{
"targetFolderId": 0,
"title": "duplicate app"
}
- 响应结果
和接口示例1返回数据一致
1.2.30. GET 获取指定用户创建的所有APP
GET /api/apps/created-list
获取指定用户创建的所有APP。针对SYSTEM_PORTAL、PUBLIC_AREA、DATA_MART的中的APP需要当前发起请求的用户拥有系统管理员以及数据管理员角色,当请求中显示指定了用户时则返回指定用户创建的所有应用,否则返回当前用户创建的所有应用。当指定非当前用户时, area取值只能是 SYSTEM_PORTAL | PUBLIC_AREA | DATA_MART之一。
请求参数
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
createdBy | query | integer | 否 | 指定用户ID |
creatorEmail | query | integer | 否 | 指定用户绑定电子邮箱 |
creatorMobile | query | integer | 否 | 指定用户绑定手机号码 |
creatorLoginName | query | integer | 否 | 指定用户登陆名 |
area | query | string | 是 | 指定区域,可选项:SYSTEM_PORTAL、PUBLIC_AREA、DATA_MART、PERSONAL_AREA、APP_MART |
orderBy | query | string | 否 | 排序字段 |
orderType | query | string | 否 | 排序方式 |
offset | query | string | 否 | 分页偏移量 |
limit | query | string | 否 | 分页大小 |
返回示例
成功
{
"code": 0,
"msg": "success",
"data": [
{
"id": 72,
"title": "常驻",
"cover": "",
"options": {
"dashboardsOrder": [],
"enableRuleStrictValidate": true,
"devices": {
"pc": true,
"mobile": true
}
},
"createdBy": 7,
"createdAt": "2022-09-28 16:52:28",
"updatedBy": 7,
"updatedAt": "2022-09-28 16:52:28",
"latestAuthorizedBy": 2,
"latestAuthorizedAt": "2022-09-28 16:40:03",
"visible": true,
"isDelete": false,
"isPublish": false,
"isBackup": false,
"folderId": 17,
"area": "DATA_MART",
"dataMode": "APP_MODE",
"emailOptions": {},
"type": "DATA_APP",
"publishState": false,
"hideDatasets": [
2
],
"status": "RUNNING",
"creator": {
"id": 7,
"name": "xf1",
"email": "xf1dgfhijoiwjgiowhoughodhgdhsg@fffqqda.com",
"loginName": "xf1"
},
"updater": {
"id": 7,
"name": "xf1",
"email": "xf1dgfhijoiwjgiowhoughodhgdhsg@fffqqda.com",
"loginName": "xf1"
},
"refreshExecDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.AppDatasetRefreshJob",
"jobParams": {
"app": 72
},
"retryTimes": 1
},
"refreshEntityGroup": "APP_REFRESH",
"entityKey": "72",
"entityGroup": "APP_EMAIL",
"execDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.AppEmailJob",
"jobParams": {
"app": 72
},
"retryTimes": 1
}
},
{
"id": 73,
"title": "常驻1",
"cover": "",
"options": {
"dashboardsOrder": [],
"enableRuleStrictValidate": true,
"devices": {
"pc": true,
"mobile": true
}
},
"createdBy": 7,
"createdAt": "2022-09-28 16:53:29",
"updatedBy": 7,
"updatedAt": "2022-09-28 16:54:14",
"latestAuthorizedBy": 2,
"latestAuthorizedAt": "2022-09-28 16:40:03",
"visible": true,
"isDelete": false,
"isPublish": false,
"isBackup": false,
"folderId": 17,
"area": "DATA_MART",
"dataMode": "APP_MODE",
"emailOptions": {},
"type": "DATA_APP",
"publishState": false,
"hideDatasets": [
2
],
"status": "RUNNING",
"creator": {
"id": 7,
"name": "xf1",
"email": "xf1dgfhijoiwjgiowhoughodhgdhsg@fffqqda.com",
"loginName": "xf1"
},
"updater": {
"id": 7,
"name": "xf1",
"email": "xf1dgfhijoiwjgiowhoughodhgdhsg@fffqqda.com",
"loginName": "xf1"
},
"refreshExecDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.AppDatasetRefreshJob",
"jobParams": {
"app": 73
},
"retryTimes": 1
},
"refreshEntityGroup": "APP_REFRESH",
"entityKey": "73",
"entityGroup": "APP_EMAIL",
"execDetail": {
"jobClass": "com.hengshi.nangaparbat.schedulejob.AppEmailJob",
"jobParams": {
"app": 73
},
"retryTimes": 1
}
}
],
"totalHits": 14,
"offset": 0,
"chartDataStartTimeMillis": 0
}
返回结果
状态码 | 状态码含义 | 说明 | 数据模型 |
---|---|---|---|
200 | OK | 成功 | Inline |
返回数据结构
状态码 200
名称 | 类型 | 必选 | 约束 | 中文名 | 说明 |
---|---|---|---|---|---|
» code | integer | true | none | none | |
» msg | string | true | none | none | |
» data | [object] | true | none | none | |
»» id | integer | true | none | none | |
»» title | string | true | none | none | |
»» cover | string | true | none | none | |
»» options | object | true | none | none | |
»»» dashboardsOrder | [string] | true | none | none | |
»»» enableRuleStrictValidate | boolean | true | none | none | |
»»» devices | object | true | none | none | |
»»»» pc | boolean | true | none | none | |
»»»» mobile | boolean | true | none | none | |
»» createdBy | integer | true | none | none | |
»» createdAt | string | true | none | none | |
»» updatedBy | integer | true | none | none | |
»» updatedAt | string | true | none | none | |
»» latestAuthorizedBy | integer | true | none | none | |
»» latestAuthorizedAt | string | true | none | none | |
»» visible | boolean | true | none | none | |
»» isDelete | boolean | true | none | none | |
»» isPublish | boolean | true | none | none | |
»» isBackup | boolean | true | none | none | |
»» folderId | integer | true | none | none | |
»» area | string | true | none | none | |
»» dataMode | string | true | none | none | |
»» emailOptions | object | true | none | none | |
»» type | string | true | none | none | |
»» publishState | boolean | true | none | none | |
»» hideDatasets | [integer] | true | none | none | |
»» status | string | true | none | none | |
»» creator | object | true | none | none | |
»»» id | integer | true | none | none | |
»»» name | string | true | none | none | |
string | true | none | none | ||
»»» loginName | string | true | none | none | |
»» updater | object | true | none | none | |
»»» id | integer | true | none | none | |
»»» name | string | true | none | none | |
string | true | none | none | ||
»»» loginName | string | true | none | none | |
»» refreshExecDetail | object | true | none | none | |
»»» jobClass | string | true | none | none | |
»»» jobParams | object | true | none | none | |
»»»» app | integer | true | none | none | |
»»» retryTimes | integer | true | none | none | |
»» refreshEntityGroup | string | true | none | none | |
»» entityKey | string | true | none | none | |
»» entityGroup | string | true | none | none | |
»» execDetail | object | true | none | none | |
»»» jobClass | string | true | none | none | |
»»» jobParams | object | true | none | none | |
»»»» app | integer | true | none | none | |
»»» retryTimes | integer | true | none | none | |
» totalHits | integer | true | none | none | |
» offset | integer | true | none | none | |
» chartDataStartTimeMillis | integer | true | none | none |