1. 应用
1.1. 应用说明
应用针对某一场景创建,它由多个仪表盘组成。 应用包含了用户一次探索所需要的全部数据、图表以及关系模型,非常适合作为日常工作的一个封装概念。
1.1.1. 应用的定义
应用结构说明
字段 | 类型 | 描述 |
---|---|---|
id | LONG | 应用的 id |
title | STRING | 应用的标题 |
options | OBJECT | 应用的配置信息 |
options.dashboards | 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.publishType | INTEGER | 应用的发布类型,可选值为:0为 PUBLIC, 1为 PRIVATE |
options.publishConfig.dataPolicy | STRING | 应用的数据策略,可选值为:WITH_PUBLISHER_DATA,WITH_VIEWER_DATA |
options.publishConfig.duplicatedPermitted | BOOL | 发布的应用是否允许复制数据集 |
options.publishConfig.showDetailPermitted | BOOL | 只读模式下访问应用是否允许显示详情 |
options.publishConfig.downloadPermitted | BOOL | 只读模式下访问应用是否允许下载数据 |
options.publishConfig.zoomInPermitted | BOOL | 只读模式下访问应用是否下钻 |
options.appTemplateUUID | STRING | 应用模版的 uuid,只在导入、导出模版用到,不存库 |
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 | 可选,应用中用于做图的默认数据集 |
收件人类型
字段值 | 描述 |
---|---|
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. 获取app及其子目录信息
获取当前用户所创建以及被协作的应用
,以及应用
的仪表盘
和数据集
,只包含id和title,用于侧边栏显示
请求URL
GET /api/v1/apps/tree
请求参数
URL 参数
字段 | 类型 | 说明 |
---|---|---|
orderBy | STRING | 可选,排序字段,默认是按照更新时间降序排序 |
orderType | STRING | 可选,排序类型,asc - 表示升序,desc - 表示降序 |
appOnly | Boolean | 可选,true 表示只返回app列表,不包含数据集、仪表盘和图表,默认为false |
返回对象的格式说明
返回的 data 字段是数组,每个元素表示一个应用
及其对应的仪表盘
和数据集
,定义如下
字段 | 类型 | 说明 |
---|---|---|
id | INTEGER | 应用的id |
title | STRING | 应用的名称 |
dashboardList | ARRAY | 应用的仪表盘 |
datasetList | ARRAY | 应用的数据集 |
dashboardList 元素的定义如下
字段 | 类型 | 说明 |
---|---|---|
id | INTEGER | 仪表盘的id |
title | STRING | 仪表盘的名称 |
charts | ARRAY | 仪表盘的所有图表 |
charts 元素的定义
字段 | 类型 | 说明 |
---|---|---|
id | INTEGER | 图表的id |
title | STRING | 图表的名称 |
datasetList 元素的定义
字段 | 类型 | 说明 |
---|---|---|
id | INTEGER | 数据集的id |
title | STRING | 数据集的名称 |
接口示例1
请求
GET /api/v1/apps/tree?orderBy=createdAt
响应结果
{ "version": "2.6", "code": 0, "msg": "success", "data": [ { "id": 1, "title": "app1", "dashboardList": [ { "id": 1, "title": "dashboard1", "charts": [ { "id": 1, "title": "chart1" } ] } ], "datasetList": [ { "id": 1, "title": "ds1" } ] } ] }
接口示例2
请求
GET /api/v1/apps/tree?appOnly=true
响应结果
{ "version": "2.6", "code": 0, "msg": "success", "data": [ { "id": 1, "title": "app1", } ] }
1.2.11. 分页查询回收站中的应用
查询不同区域下回收站中的应用
请求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.12. 恢复回收站中的应用
恢复回收站中的应用
请求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.13. 彻底删除回收站中的应用
彻底删除回收站中的应用
请求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.14. 在当前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.15. 批量隐藏 & 排序仪表盘
批量隐藏 & 排序仪表盘
请求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.16. 上传封面
请求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.17. 上传水印
请求URL
PUT /api/v1/apps/{appId}/watermark
请求参数
Request Body 参数
表单数据
后端API请求代码样例
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | INTEGER | 图片的 id |
1.2.18. 发布应用
请求URL
POST /api/v1/apps/{appId}/publish
请求参数
url 参数
字段 | 类型 | 描述 |
---|---|---|
appId | INTEGER | 应用的 id |
request body 请求体
应用结构说明,只涉及到 options.publishConfig 实体
返回对象的格式说明
接口示例1 在应用创作区新建应用
请求
POST /api/v1/apps/1/publish
{ "options": { "publishConfig": { "publishTitle": "0529-3.1-app", "publisher": "trial", "coverImageId": 102, "watermarkImageId": 103, "zoomInPermitted": true, "showDetailPermitted": true, "downloadPermitted": true, "duplicatedPermitted": true, "publishType": 1, "dataPolicy": 0 } } }
响应结果
{ "version": "3.2-SNAPSHOT@@git.commit.id.abbrev@#null", "code": 0, "msg": "success", "data": { "id": 3207, "title": "0529-3.1-app", "options": { "dashboards": [ 1 ], "datasets": [ 3, 2, 1 ], "dashboardsOrder": [ 1 ], "publishConfig": { "zoomInPermitted": true, "showDetailPermitted": true, "downloadPermitted": true, "publishTitle": "0529-3.1-app", "publisher": "trial", "totalPages": {}, "duplicatedPermitted": true }, "enableAppRule": false }, "createdBy": 1, "createdAt": "2020-06-04 10:34:35", "updatedBy": 1, "updatedAt": "2020-06-04 10:34:36", "isDelete": false, "isPublish": true, "publishHash": "EFBD486D77DEA6973AC2821E8EE4528F", "publishedBy": 3153, "hsVersion": 0, "datasets": [ 3, 2, 1 ], "publish": true } }
1.2.19. 取消发布
取消发布
请求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.20. 查看应用中使用的数据连接
请求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.21. 替换应用中使用的数据连接
请求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.22. 查看应用中使用的数据包
请求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.23. 替换应用中使用的数据包
请求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.24. 全部禁用应用中的单个数据集更新计划
请求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.25. 应用刷新时排除这个数据集
请求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.26. 应用刷新时包含这个数据集
请求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.27. 查询应用中单个数据的执行计划列表
请求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.28. 查询应用刷新的执行计划
请求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.29. 创建自助查询应用的用户设置
请求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 }