历史版本25 :开放平台插件 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

一、概述编辑

  1. FR11.0提供开放平台,能够依托于FineReport,方便开发人员快速构建向中心系统以外的其他系统,提供安全、灵活、规范、有效的web服务

  2. 提供统一的平台配置,实现客户端API的权限管理和验证规范的管理。

  3. 警告: 如果有使用到子插件时升级,需要先禁用子插件,或升级后重启服务器

二、功能介绍编辑

功能入口。
  1. 以管理员身份登入决策平台后,点击【管理系统】【开放平台】进入功能介面。

【API管理】
  1. 【所有API】是对第三方系统与FR进行资料互动服务的配置。

  2. 介面左侧为分组,是对服务API进行分组的管理,系统內建了多种常用分组。

  3. 使用者可对分组进行新增、编辑、删除的管理操作,编辑和删除不可对内置的分组进行操作。

  4. 选中一个分组后,介面右侧展示该分组下的服务API列表,系统內建了多种常用的服务API。

  5. 使用者可对服务API进行新增、编辑、禁用、单个删除、批量删除和更换分组的操作。

注:内置的分组是无法编辑和删除的。





【应用管理】
  1. 为每个应用提供一对ID和密钥,用于API的鉴权操作。

  2. 开放平台支持对客户端进行新增、编辑、复制、禁用、单个删除、批量删除的管理操作。

  3. 应用设置支持自定义【应用名称】、【应用描述】和【备选认证】,用于区分不同应用。

  4. 【应用ID】和【密钥】不可自定义和编辑,在添加应用后自动生成。

  5. 编辑操作还支持重置密钥操作。


【认证方式】
  1. 认证方式为对外服务提供相关的安全保障,开放平台有三种默认3种认证方式,也允许用户自己去进行扩展

  2. 使用者可对认证方式进行新增、编辑、禁用、单个删除、批量删除的管理操作。

  3. 认证方式设定项中【认证名称】和【认证描述】可自定义,方便使用者自行区分。

  4. 认证方式设定项中【接口类】是我们需要实现的认证API的例项物件(同一个类,可以透过配置的改变来变成多种认证方式)。

  5. 认证方式设定项中【配置】是这个认证需要的一些固定配置,例如摘要签名认证需要定义【摘要算法】和【有效期】,配置可以设置为加密项,加密后的信息在保存后再也无法从前台读取。

内置认证方式。

【自签发token认证】这个认证是所有的应用接口都天然支持的,不论你选不选备选认证,这种方式都支持。

自签发token认证是通过access_token来验证登陆信息,需先使用客户端ID和密钥获取access_token。

应用使用应用D和密钥获取token请求地址:$HOST/sp/client/api/token
参数:client_id = 应用ID  secret= 密钥   参数可以写在Query或Header里

利用参数client_token={access_token}访问具体API 

【AKSK直接认证】方式是利用客户端ID和密钥直接作为认证依据,直接呼叫服务的方式,处于安全考虑,不推荐使用该方式,无需配置项,这项认证不可编辑

即在请求头添加client_id={应用ID} secret={密钥}即可直接访问应用


【摘要签名认证】方式是在不能用token认证的情况下,利用摘要演算法(比如 SM3/MD5/ SHA256),对客户端ID和金钥以及时间戳进行签名后,透过签名和客户端ID进行认证。比较推荐使用这种认证方式,相对安全一些。

  1. 【摘要签名认证】中【签名】= 摘要算法(应用ID+密钥+时间戳)+时间戳。例如:【client_id=203bc7b8db1d423fb55824150327ef98,secret=98ffd41b86db4868a6875f57e6974bbc, timestamp=1600166180321, 配置的 签名算法为MD5,超时时间为300秒】->【签名 = MD5(client_id+secret+timestamp)+timestamp = EE6E14BCEC5724C3BC6FC08AFC5C2B111600166180321】


【国密SM2签名认证】

利用国密SM2 椭圆算法进行加解密,使用标准椭圆参数  签名_sign_=sm2(clientId+secret+timestamp),


配置项priKey=私钥  timeout=超时时间(秒)

API设置。编辑

  1. 【API名称】和【API描述】可任意自定义,方便使用者自行区分。

  2. 【接口类】指向的是我们API服务的具体实现。

  3. 【API路径】和【API方法】表示的是http请求中呼叫这个API的 path和方法,路径前面不要加/。新增加API的【API路径】,使用者也可以任意自订(注意不要和已有API的路径相同)。

  4. 实际请求地址:$HOST/sp/client/api/{API路径}。假设 $HOST = http://localhost:8075/webroot/decision ,则请求地址为 http://localhost:8075/webroot/decision/sp/client/api/{API路径}。

  5. 【配置】就是我们初始化这个服务需要的配置资讯。

注:内置的API部分是不能编辑的,即便能编辑的在重启后也会还原。


【客户端权限】
  1. 对于非公开API来说,调用都是需要做权限验证的,那么我们不同的场景不同的应用可调用的接口范围肯定是不一样的,我们可以在这个页面内进行分配(公开API则可以随意调用不受这里的约束)



注:目前不存在分组权限,也就是即便是把某个分组权限打开了,实质上也只是把当前分组下面的API的权限分配给了某个客户端,如果后续发生了API分组变更,或者该分组API新增,那么权限是不会发生变化的。


【请求日志】
  1. 该页面可以查看API的请求频率,也可以查看API请求的详细记录。

三、调用示例编辑

配置完了权限之后,就可以调用api接口了


3.1 SQL数据服务

这个demo示例用来向我们展示,最简单的将SQL转换成数据服务向第三方提供使用的场景

我们需要用到的接口实例是:[demo]Sql数据服务

包含两个配置项:

connection:SQL运行的数据源连接名称(比如FRDemo之类的)

sql:数据来源的SQL

这个接口主要用于一些基础的简单的数据服务的对外提供,完全不依赖于模板,只要会写SQL就可以了

比如如下的测试例子:

数据源连接 = FRDemo  SQL = SELECT * FROM `销量` where 地区 = '${地区}'

这个查询中我们使用到了一个参数 地区

调用一下看看【两种传参的方式



3.2 模板数据集数据服务

这个demo示例用来向我们展示,对于我们已经做好的模板内的数据集数据如何向第三方进行提供。

我们需要用到的接口实例是:报表数据集服务

包含两个配置项:

report:数据集的来源(相对于reportlets)

dsName:数据集的名称

这个接口主要用于一些模板里面已经做好了的数据集第三方需要使用对应数据的,或者数据的来源不是SQL的数据集数据,或者其他不适合直接向第三方开发源数据连接的数据服务。

比如如下的测试例子:

模板路径 = GettingStarter.cpt    数据集名称 = ds1

这个查询中我们使用到了一个参数 地区




调用一下看看【两种传参的方式

25.png


3.3 填报接口调用

填报接口这个demo主要用于展示,当我们希望向第三方提供 数据录入/审批 这类业务服务的时候我们如何借助模板来简单的实现。

首先它需要用到我们开发好的接口实例:com.tptj.plugin.hg.client.center.api.data.WriteReport

配置上支持两个配置项

report : 某个填报模板的路径(相对于reportlets目录)

sheet:【可选】需要执行的具体某个sheet名称对应sheet的模板填报属性内的填报业务。【如果不填这个参数,就会执行所有sheet的模板填报属性内的填报业务】。

注:该填报不会触发JS相关事件!






注:这里我们用到了body这个参数,这个参数可以直接通过URL传,也可以通过请求的body传(仅限通过调用接口服务的情况下)

如果http请求的body是一个json,那么在计算的报表内有两种引用

1.直接通过 $body 或者${body} 这个参数名获取到整个json字符串

2.如果如果是{ key1:xxxx,key2:ffffff,...,keyN:fsss }这种结构的body,还可以直接通过$key1,$key2,....$keyN在报表中使用这些参数


3.4 简单报表行列式数据服务

这个demo示例用来向我们展示,对于一些无法用单个数据集简单取出的数据,可以通过制作成简单的报表的形式输出数据服务。

我们需要用到的接口实例是:com.tptj.plugin.hg.client.center.api.data.GetListByReport

包含两个配置项:

report:数据来源的报表路径(相对于reportlets)

tag:数据来源的sheet名

这个接口主要用于一些模板里面已经做好了的数据集第三方需要使用对应数据的,或者数据的来源不是SQL的数据集数据,或者其他不适合直接向第三方开发源数据连接的数据服务。

比如如下的测试例子:

模板路径 = WorkBook12.cpt    sheet名 =sheet1

这个查询中我们使用到了一个参数 地区

6.png

通过两个数据集关联实现


我们定义的demo接口配置详情如下




实际测试效果如下【两种传参方式

9.png

特别说明:这并不是一个真正通用的接口实现,如果要使用这个接口实例,制作的模板必须满足以下的限制

只支持纯数据表格

目前简单的把一个sheet分成了以下几种情况

数据行:从上往下,逐行从左往右查看,找到的第一个有 “向下扩展”单元格的且该单元格所在行未隐藏的行作为数据的起始行。往下所有的内容都被简单认为是要输出的数据区域(所以限制了我们一个sheet内只能有一个数据区域)

标题行:数据行之前的所有行中,如果该行只有一个格子有值,且该行未隐藏,则该行被作为标题行。可以有多个标题行,输出顺序按行序号排序(明细数据中不输出标题)

列表头行:数据行之前的所有行中,如果该行有超过一个格子有值,且该行未隐藏,则该行被作为列表头行。可以有多层列表头,但是目前每列的列表头只取最接近数据行的列表头单元格的值作为该列的列表头。

空行:所有行高等于0,或者一整行都没有数据的行。空行不会输出

空列:列宽等于0,或者该列的列表头的值是空的。空列不会输出

合并行的数据会按最合并小行粒度输出。

注:不要使用复杂或大数据量模板

3.5 简单报表分组式数据服务

这个demo示例用来向我们展示,对于一些无法用单个数据集简单取出的数据,可以通过制作成简单的报表的形式输出数据服务。

我们需要用到的接口实例是:报表分组式数据服务


包含两个配置项:

report:数据来源的报表路径(相对于reportlets)

tag:数据来源的sheet名

比如如下的测试例子:

模板路径 = WorkBook12.cpt    sheet名 =sheet1

这个查询中我们使用到了一个参数 地区


通过两个数据集关联实现


我们定义的demo接口配置详情如下

12.png

实际测试效果如下【两种传参方式


特别说明:这并不是一个真正通用的接口实现,如果要使用这个接口实例,制作的模板必须满足一定的限制,限制跟简单报表行列式数据服务相同

注:不要使用复杂或大数据量模板


目前开放的部分API:编辑

平台相关


定制开发范例-自订认证方式及API
  1. 应用场景:內建的认证方式或API不足以满足业务需求,希望能够添加自订开发认证方式或API。

  2. 范例代码及说明:jee/open-client-demo: 开放平臺子插件demo - open-client-demo - 帆软第三方插件仓库 (fanruan.com)

注:该范例为定制开发范例,仅做参考。用户可参考相关逻辑自行开发,如需官方开发人员做相关定制开发,请联繫对应销售经理进一步諮询。