文档首页 / 嵌入接口清单

嵌入接口清单

第三方系统可调用的 /api/embed/** 接口清单:认证方式、参数、返回值,含目录树、报表参数、后端直接导出、外部数据集、会话管理的 curl 示例。

概述

/api/embed/** 是 Sight Report 面向第三方系统开放的一组接口。这些接口不使用平台登录态(satoken),而是使用两种嵌入认证方式之一:

认证方式 说明
_s 签名 每次请求在查询参数 _s(个别接口为请求体 signature)里带签名。无状态,不需要预先建立会话,适合服务端调用。签名规则见签名免登。
嵌入会话 先用签名调用 POST /api/embed/auth 换取 sessionToken,之后在请求头带 X-Embed-Session: <sessionToken>。适合浏览器内嵌入页面。

所有接口的响应统一为 {"code":200,"success":true,"message":"...","data":...} 的信封(导出类接口直接返回文件流)。

注意:每个客户端 IP 对 /api/embed/** 的请求上限为每分钟 120 次,超出返回 HTTP 状态 429,提示「请求频率超限,请稍后再试」。

功能入口

  • 接口所属的应用在 系统 > 三方集成 中创建,参见三方集成应用。
  • 「三方集成」页面的应用详情里带有各场景的调用说明与多语言代码样例,可与本文对照。

接口一览

接口 方法 认证 用途
/api/embed/auth POST 签名(请求体) 校验签名,换取嵌入会话,见签名免登
/api/embed/access/auth POST 无 公开链接换取会话,见报表公开链接
/api/embed/session/validate GET 会话头 校验会话是否有效
/api/embed/session/logout POST 会话头 注销会话
/api/embed/report/type-tree GET _s 按文件类型获取目录树
/api/embed/report/tag-list GET _s 按标签查询报表列表
/api/embed/report/parameters GET _s 读取报表的参数定义
/api/embed/report-file/source GET 会话头 读取已发布的报表模板正文
/api/embed/export/pdf GET _s 或会话头 导出 PDF
/api/embed/export/excel GET _s 或会话头 导出 Excel
/api/embed/export/word GET _s 或会话头 导出 Word
/api/embed/export/csv GET _s 或会话头 导出 CSV
/api/embed/export/ofd GET _s 或会话头 导出 OFD
/api/embed/export/excel POST 会话头 创建大数据量 Excel 导出任务
/api/embed/export/excel/task/{taskId} GET 会话头 查询导出任务状态
/api/embed/export/excel/download/{taskId} GET 会话头 下载导出任务生成的文件
/api/embed/staged-dataset/set POST 签名(请求体) 上传外部数据集,返回 token
/api/embed/staged-dataset/clear POST 签名(请求体) 按 token 清除外部数据集
/api/embed/print/* GET/POST _s 或会话头 续打宿主接入,见下文

以下示例中的变量沿用签名免登里的脚本。先定义一个生成 _s 的函数:

BASE=https://your-domain
APP_ID=erp-system
SECRET='在三方集成页面保存的 appSecret'

# 用法:make_s <account> <userName> <reportId,可为空>
make_s() {
  local EXPIRE=$(( $(date +%s) + 600 ))
  local SIGN=$(printf '%s' "$APP_ID|$1|$2|$3|$EXPIRE" \
    | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $NF}')
  printf '{"appId":"%s","account":"%s","userName":"%s","reportId":"%s","expireAt":%s,"signature":"%s"}' \
    "$APP_ID" "$1" "$2" "$3" "$EXPIRE" "$SIGN" | base64 | tr -d '\n=' | tr '+/' '-_'
}

报表查询接口

三个接口都用 _s 认证,签名里的 reportId 可以为空。如果应用配置了「允许访问的报表」白名单,且签名里带了 reportId,该 reportId 必须在白名单内,否则返回「无权访问该报表」。

获取目录树

GET /api/embed/report/type-tree

参数 说明 取值/默认值
_s 签名 必填
fileType 文件类型 必填。枚举:grid、document、dashboard、datawall、mobile、directory

data 是树形数组,节点包含 id、parentId、name、fileType、version、description、createTime、updateTime、creatorName、updaterName、tags,有子节点时带 children。

S=$(make_s zhangsan 张三 "")
curl -s "$BASE/api/embed/report/type-tree?fileType=grid&_s=$S"

按标签查询报表

GET /api/embed/report/tag-list

参数 说明 取值/默认值
_s 签名 必填
tag 标签名 必填

data 为报表数组,字段同目录树节点。

curl -s "$BASE/api/embed/report/tag-list?tag=%E6%9C%88%E6%8A%A5&_s=$S"

读取报表参数定义

GET /api/embed/report/parameters

参数 说明 取值/默认值
_s 签名 必填
reportId 报表 ID 可选

data 结构:

字段 说明
reportId / reportName 报表标识与名称
parameters[].name 参数名
parameters[].dataType 参数数据类型
parameters[].elementType 集合参数的元素类型,仅 dataType 为 List 且元素类型不是文本时有值
parameters[].defaultValue 默认值
parameters[].defaultValueMode / defaultValuePreset 默认值的模式与预设,用于自建查询表单时还原默认值

三方自建查询表单时,可先读取参数定义,再把用户填写的值通过嵌入链接的 parameters 传给报表,见报表嵌入。

S=$(make_s zhangsan 张三 rpt_sales)
curl -s "$BASE/api/embed/report/parameters?reportId=rpt_sales&_s=$S"

后端直接导出

服务端可以不打开页面,直接下载导出文件。

GET /api/embed/export/{pdf|excel|word|csv|ofd}

参数 说明 取值/默认值
fileId 报表 ID 必填
_s 签名 使用签名认证时必填;改用 X-Embed-Session 头时省略
parameters 报表参数,JSON 字符串,需 URL 编码 可选
fileVersion 指定报表版本 可选
pageIndex 只导出指定页(页码从 1 起) 可选
sheetId 多 sheet 报表指定要导出的 sheet 可选

使用 _s 时有两条规则:

  1. 签名里的 reportId 必须非空,并与请求的 fileId 完全一致,否则返回「签名中的 reportId 与请求的 fileId 不匹配」。
  2. 签名有效期内该链接可重复使用,服务端不保存会话。
S=$(make_s zhangsan 张三 rpt_sales)
curl -s -o sales.pdf \
  "$BASE/api/embed/export/pdf?fileId=rpt_sales&_s=$S&parameters=%7B%22dept%22%3A%22%E5%86%85%E7%A7%91%22%7D"

上例的 parameters 解码后是 {"dept":"内科"}。

大数据量 Excel 异步导出

浏览器嵌入页面在数据量大时使用异步任务:先创建任务,轮询状态,完成后下载。以下三个接口使用会话头认证。

  1. 创建任务:POST /api/embed/export/excel,请求体 {"fileId":"...","fileVersion":"","parameters":"{\"dept\":\"内科\"}","fileName":"..."}。其中 parameters 是 JSON 字符串。
  2. 查询状态:GET /api/embed/export/excel/task/{taskId}。
  3. 下载:GET /api/embed/export/excel/download/{taskId}。

任务对象字段:taskId、status(pending、processing、completed、failed)、downloadUrl、fileName、progress、errorMsg、createTime、completeTime。任务只能由创建它的会话查询和下载。

curl -s -X POST "$BASE/api/embed/export/excel" \
  -H "X-Embed-Session: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"fileId":"rpt_sales","parameters":"{}"}'

外部数据集

把宿主系统的数据推送给报表使用,适用于报表里配置了「外部数据集」的场景。配置方式见外部数据集。

上传

POST /api/embed/staged-dataset/set,请求体:

字段 说明 取值/默认值
signature 签名(Base64Url 后的 _s 字符串) 必填
reportId 关联报表 ID 可选
datasets 对象,键是数据集名称,值是行数组(每行为列名到值的对象) 必填,不能为空

成功时 data 为 {"token":"...","datasetNames":["ds1"]}。数据总大小默认上限 5 MB,保留时间默认 24 小时(配置项 app.staged-dataset.max-payload-size、app.staged-dataset.ttl-hours)。使用时在嵌入链接或导出的 parameters 里加入 "_dataIds": "<token>"。

S=$(make_s zhangsan 张三 "")
curl -s -X POST "$BASE/api/embed/staged-dataset/set" \
  -H 'Content-Type: application/json' \
  -d "{\"signature\":\"$S\",\"datasets\":{\"ds1\":[{\"dept\":\"内科\",\"cnt\":12}]}}"

清除

POST /api/embed/staged-dataset/clear,请求体 {"signature":"...","token":"..."}。只能清除同一应用创建的 token,否则返回「未找到对应的数据集或无权清除」。

会话管理

接口 说明
GET /api/embed/session/validate 请求头带 X-Embed-Session。有效时 data 为会话信息,缺少令牌返回「缺少会话Token」,无效返回「会话无效或已过期」
POST /api/embed/session/logout 请求头带 X-Embed-Session。移除会话,总是返回成功
curl -s "$BASE/api/embed/session/validate" -H "X-Embed-Session: $TOKEN"
curl -s -X POST "$BASE/api/embed/session/logout" -H "X-Embed-Session: $TOKEN"

会话访问报表时受范围限制:只能访问签名锚定的报表,以及从它出发经「嵌入报表」区块或单元格报表链接可达的报表,其他报表返回 403「无权访问该报表」。

读取模板正文

GET /api/embed/report-file/source?reportId=<id>[&fileVersion=<版本>],需要会话头,且会话对该报表有权限。返回已发布的报表模板。前端嵌入页面使用此接口加载报表,第三方一般不需要直接调用。没有会话或越权时返回 403「无权查看该报表」。

续打接口

/api/embed/print/* 用于单据续打场景下宿主系统接管打印进度,支持 _s 或会话头认证:

接口 方法 说明
/api/embed/print/progress GET 查询续打状态
/api/embed/print/continue POST 从上次进度继续打印,可带 fromPage
/api/embed/print/confirm POST 确认打印结果,必须带 token
/api/embed/print/cancel POST 取消,必须带 token
/api/embed/print/reset POST 重置进度
/api/embed/print/manual-set POST 手动设置进度,必须带 page、rowOnPage

reset 和 manual-set 需要在「三方集成」应用中开启「续打进度管理」开关(应用字段 allowPrintReset,默认关闭),未开启时返回 403。续打的报表设置见套打对位。

常见错误

现象 原因 解决方法
签名格式无效 _s 不是 Base64Url 编码的 JSON 检查编码方式,不带 = 填充
签名已过期 expireAt 早于当前时间(秒) 重新生成,注意单位是秒
签名验证失败 appSecret 不对或签名内容顺序不对 严格按 appId|account|userName|reportId|expireAt 拼接
应用不存在 / 应用已禁用 appId 错误或应用被停用 在「三方集成」中核对
无权访问该报表 报表不在应用的白名单内 调整白名单或换报表
用户已被停用 对应外部用户被管理员停用 在用户管理中启用
会话无效或已过期(401) 会话令牌错误或超过有效期 重新调用 /api/embed/auth

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。