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 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 在应用创作区新建应用

  1. 请求 POST /api/v1/apps
{
  "title": "应用名称",
  "options": {
    "dashboardsOrder": [],
    "themes": {}
  }
}
  1. 响应结果
{
  "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 在应用创作共享空间根目录下创建应用

  1. 请求 POST /api/v1/apps
{
  "folderId": 1,
  "title": "应用名称",
  "options": {
    "dashboardsOrder": [],
    "themes": {}
  }
}

接口示例3 在应用集市根目录下创建应用

  1. 请求 POST /api/v1/apps
{
  "folderId": 2,
  "title": "应用名称",
  "options": {
    "dashboardsOrder": [],
    "themes": {}
  }
}

接口示例4 在应用创作下创建自助查询应用

  1. 请求 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

  1. 请求 GET /api/v1/apps?pOrCByCurrent=false&offset=0&limit=20&orderBy=updatedAt&orderType=desc

  2. 响应结果

{
  "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 的应用

  1. 请求 GET /api/v1/apps/1

  2. 响应结果

{
  "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 的应用标题

  1. 请求 PUT /api/v1/apps/1
{
  "title": "wewe",
  "hsVersion": 1
}

接口示例2 启用 id 为 1 的应用行权限规则

  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 参数

图表的配置信息,详见图表结构说明

返回对象的格式说明

数据集数据 datasetResultDto

接口示例1

  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
          }
        ]
      }
    ]
  }
}
  1. 响应结果
{
  "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 参数

图表的配置信息,详见图表结构说明

返回对象的格式说明

数据集数据 datasetResultDto

接口示例1

  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"
  }
}
  1. 响应结果
{
  "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

  1. 请求
GET /api/v1/apps/{appId}/export-template
  1. 响应结果 参照文件 app_template.json

1.2.9. 导入应用模版

导入 Json 模版文件创建新的应用。

请求URL

POST /api/v1/apps/import-template

请求参数

URL 参数
字段 类型 说明
folderId NUMBER 可选, 文件夹id,如果为空,就导入个人区
file BINARY 必填, 模版文件流

返回对象的格式说明

返回新生成的应用信息,详情见####应用结构说明

接口示例1

  1. 请求
POST /api/v1/apps/import-template
  1. 请求参数
folderId: 1234
file: (binary)
  1. 响应结果
{
  "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

  1. 请求
GET /api/v1/list-trash?area=PERSONAL_AREA
  1. 响应结果
{
  "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

  1. 请求
POST /api/v1/apps/1664/restore
  1. 响应结果
{
  "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

  1. 请求
POST /api/v1/apps/1664/prune
  1. 响应结果
{
  "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 的数据集函数

返回对象的格式说明

数据集数据 datasetResultDto

参考示例

  1. 请求
POST /api/v1/apps/1/query
  1. Request Body 参数
{
  "kind": "formula",
  "op": "summarize(dataset(1), {type}, sum({votes}) as 'sum1')"
}
  1. 响应结果
{
  "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

  1. 请求
PUT /api/v1/apps/{appId}/update-dashbords-order-hide
  1. 请求体
{
  "options": {
    "dashboardsOrder": [
      1,
      2,
      3
    ]
  },
  "resourceBatchUpdateDtos": [
    {
      "ids": [
        1
      ],
      "pathAndValues": [
        {
          "path": [
            "hide"
          ],
          "value": false
        }
      ]
    },
    {
      "ids": [
        2,
        3
      ],
      "pathAndValues": [
        {
          "path": [
            "hide"
          ],
          "value": true
        }
      ]
    }
  ],
  "hsVersion": 5
}
  1. 响应结果
{
  "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请求代码样例

后端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 在应用创作区新建应用

  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"
      }
    }
  }
  1. 响应结果
{
  "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 中图表所用到的所有数据连接

  1. 请求 GET /api/v1/apps/1/connection-replace

  2. 响应结果

{
  "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 中图表所用到的一个数据连接

  1. 请求 POST /api/v1/apps/1/connection-replace
[
  {
    "current": 4197,
    "replace": 4122
  }
]
  1. 响应结果
{
  "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 中图表所用到的所有数据包

  1. 请求 GET /api/v1/apps/1/dataapp-replace

  2. 响应结果

{
  "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 中图表所用到的一个数据包

  1. 请求 POST /api/v1/apps/1/dataapp-replace
[
  {
    "current": 3376,
    "replace": 154
  }
]
  1. 响应结果
{
  "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的所有单个数据集更新计划

  1. 请求 POST /api/apps/1/disable-all-dataset-schedule
{}
  1. 响应结果
{
  "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的所有单个数据集更新计划

  1. 请求 POST /api/apps/1/exclude-in-app-refresh
{
  "entityKey": "1-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的所有单个数据集更新计划

  1. 请求 POST /api/apps/1/include-in-app-refresh
{
  "entityKey": "1-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

  1. 请求 GET /api/apps/1/dataset-schedules

  2. 响应结果

{
  "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

  1. 请求 GET /api/apps/1/refresh-schedule

  2. 响应结果

{
  "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

  1. 请求 GET /api/apps/1/refresh-schedule

  2. 响应结果

{
  "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 在应用创作区创建应用副本

  1. 请求 POST /api/apps/1/duplicate

  2. 响应结果

{
  "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 在应用集市区使用模版新建应用

  1. 请求 POST /api/apps/2/duplicate
  2. 响应结果
    和接口示例1返回数据一致

接口示例3 在应用创作区将应用复制到指定目录下

  1. 请求 POST /api/apps/3/duplicate
{
  "targetFolderId": 0,
  "title": "duplicate app"
}
  1. 响应结果
    和接口示例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
»»» email string true none none
»»» loginName string true none none
»» updater object true none none
»»» id integer true none none
»»» name string true none none
»»» email 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

results matching ""

    No results matching ""

    Introduction 应用参数