本节将通过一个实际案例,对数据服务产品的使用方法及流程进行梳理,更好的方便用户了解产品整体的功能及用法。

背景


当前需要提供一个查询用户预定酒店的服务,前端只需要传一个订单ID,后端就会返回整个订单的信息,包括用户信息、酒店信息和房间信息等。

对上述需求进行分析:

  • 首先,当请求订单详情时将先返回订单对应的用户ID、酒店ID、房间ID,因此将涉及4个API服务;
  • 其次,根据各类ID查询对应的信息,例如订单ID返回用户ID、酒店ID以及房间ID;用户ID查询用户账号、姓名、年龄以及性别;酒店ID查询酒店名称、星级以及地点;房间ID查询房型、楼层以及是否有窗;
  • 最后,通过服务编排功能将上述几个服务进行加工整合,将整合好的数据进行返回。

示例图如下:
服务编排案例演示 - 图1

准备


准备阶段需要完成数据、权限以及资源组的准备工作。

案例数据

本案例中涉及的数据源为MySQL,需要事先在MySQL中准备数据,数据包括:酒店订单表用户详情表酒店详情表以及房间详情表四张表,示例如下:

  • 酒店订单表
    订单ID 用户ID 酒店ID 房间ID
    10001 01 20001 1601
    10002 01 20002 1503
    10003 02 20003 1201
    10004 03 20004 1101
    10005 05 20002 1602
    10006 04 20001 1202
    10007 07 20003 1601
    10008 06 20002 1601

参考代码:

Create table training2.hotel_order_info(
`order_id` int(10) comment '酒店订单ID',
`user_id` int(10) comment '用户ID',
`hotel_id` int(10) comment '酒店ID',
`room_id` int(10) comment '房间ID'
)comment '酒店订单表'

Insert into training2.hotel_order_info VALUES(10001,01,20001,1601),(10002,01,20002,1503), (10003,02,20003,1201), (10004,03,20004,1101), (10005,05,20002,1602), (10006,04,20001,1202), (10007,07,20003,1601), (10008,06,20002,1601);
  • 用户详情表
用户ID 账号 姓名 年龄 性别
01 MH0001 逍遥生 25
02 MH0002 杀破狼 24
03 MH0003 舞天姬 20
04 MH0004 玄彩娥 18
05 MH0005 龙太子 20
06 MH0006 虎头怪 25
07 MH0007 神天兵 28

参考代码:

Create table training2.user_info(
`user_id` int(10) comment '用户ID',
`user_account` varchar(64) comment '账号',
`user_name` varchar(64) comment '姓名',
`user_age` int(10) comment '年龄',
`user_gender` varchar(64) comment '性别'
)comment '用户详情表'

Insert into training2.user_info VALUES(01,'MH0001', '逍遥生' ,25, '男'),(02,'MH0002', '杀破狼' ,24, '男'), (03,'MH0003', '舞天姬' ,20, '女'), (04,'MH0004', '玄彩娥' ,18, '女'), (05,'MH0005', '龙太子' ,20, '男'), (06,'MH0006', '虎头怪' ,25, '男'), (07,'MH0007', '神天兵' ,28, '男');
  • 酒店详情表
    酒店ID 酒店名称 星级 地点
    20001 云来酒店 四星 长安
    20002 长寿村酒店 四星 长寿村
    20003 傲来国客栈 三星 傲来国
    20004 长安酒店 五星 长安

参考代码:

Create table training2.hotel_info(
`hotel_id` int(10) comment '酒店ID',
`hotel_name` varchar(64) comment '酒店名称',
`hotel_level` varchar(64) comment '星级',
`hotel_addr` varchar(64)  comment '地点'
)comment '酒店详情表'

Insert into training2.hotel_info VALUES(20001,'云来酒店', '四星' , '长安'),(20002,'长寿村酒店', '四星' , '长寿村'), (20003,'傲来国客栈', '三星' , '傲来国'), (20004,'长安酒店', '五星', '长安');
  • 房间详情表
    房间ID 房型 楼层 是否有窗
    1101 通铺 1楼
    1201 柴房 2楼
    1202 地字1号 2楼
    1601 天字1号 6楼
    1602 人字1号 6楼
    1503 天字2号 5楼

参考代码:

Create table training2.hotel_room_info(
`room_id` int(10) comment '房间ID',
`room_style` varchar(64) comment '房型',
`room_floor` varchar(64) comment '楼层',
`room_window` int(10)  comment '是否有窗,1:是,0:否'
)comment '房间详情表'

Insert into training2. hotel_room_info VALUES(1101,'通铺', '1楼', 0),(1201,'柴房', '2楼', 0), (1202,'地字1号', '2楼', 1), (1601,'天字1号', '6楼', 1) , (1602,'人字1号', '6楼', 1) , (1503,'天字2号', '5楼', 1);

权限

此案例中会涉及到API集合API列表应用管理策略管理资源组等功能模板,因此需要配置相应的权限给不同的角色或用户。

涉及该步骤的角色:项目负责人管理员

安全中心页面,在左侧菜单栏选择安全管理 - 功能权限,在右侧点击添加方案,进入方案配置页面。在页面中选择具体的授权对象,如此处选择数据服务
服务编排案例演示 - 图2

在实际使用过程中可根据要求对权限进行设置,此处权限设置如下:

  • 功能模块:
    功能模块主要用来设置是否有权限查看数据服务中各功能页面,如无查看权限,则相应的功能项将被隐藏,无法进行查看。
    服务编排案例演示 - 图3

  • 集合:
    集合主要用来设置角色或用户是否在API集合功能模块里具有对API集合新建、查看、编辑、删除的权限。
    服务编排案例演示 - 图4

  • API:
    该项主要是用来设置角色或用户是否在API列表功能模块里具有API或服务编排的新建、查看、导出下载、测试、编辑、删除、复制等权限。
    服务编排案例演示 - 图5

  • 应用:
    该项主要是用来设置角色或用户是否在应用管理功能模块里具有对已有应用的查看、编辑、删除以及新建应用的权限。
    服务编排案例演示 - 图6

  • 访问策略、流控策略、报警策略、行级权限:
    这几项主要是用来设置角色或用户对各种策略的使用权限,设置方式相同,仅以一种为例。
    服务编排案例演示 - 图7

  • 资源组:
    该项主要是用来设置角色或用户是否具有资源组新建以及对现有资源组的编辑、查看、删除权限。
    服务编排案例演示 - 图8

配置完各模块的权限之后,在授权对象处指定角色或用户,点击保存完成配置。

资源组配置

在数据服务页面,点击下方配置管理进入配置管理页面,在左侧菜单栏中选择资源组管理,点击右侧页面中新建按钮即可开始资源组的创建。

涉及该步骤的角色或用户:已在安全中心授予资源组新建等权限的角色或用户

服务编排案例演示 - 图9

因为本次案例会涉及API和服务编排的创建,所以在资源组里面要完成两类资源组的配置,具体配置参数视不同环境而异,这里需要注意的是资源类型的选择,对于API的资源组需要选择资源类型为API,对于服务编排资源组的资源类型选服务编排
服务编排案例演示 - 图10

API集合


准备环节完成后就进入到具体的配置环节,首先配置API集合,集合名称叫做酒店订单,用来存放API和数据服务。

在数据服务页面选择服务开发 - API管理列表 - API集合,点击右侧新建API集合

服务编排案例演示 - 图11

在新建弹框中,输入集合名称为酒店订单,集合Path为hotelorder,集合Path和API Path会生成唯一的API请求地址Path。
服务编排案例演示 - 图12

创建完成后的集合会在集合列表中进行展示,点击右侧API列表,可查看属于该集合的API和服务编排。

服务编排案例演示 - 图13

新建API


API列表页面,点击新建API开始API创建,根据前面分析,此处需要创建4个API。

涉及该步骤的角色或用户:已在安全中心授予API新建等权限的角色或用户

酒店订单表API

配置API信息页面完成如下信息填写:
服务编排案例演示 - 图14

配置项 配置参数
API名称 hotel_order_test
API集合 酒店订单
API Path hotel_order_test
协议 HTTP
请求方式 GET
返回类型 JSON
超时时间 10000
描述 酒店订单表API
apiToken鉴权 开启

除了配置上述信息外,还需要完成入参定义的配置。
服务编排案例演示 - 图15

配置项 配置参数
参数名 order_id
入参类型 普通入参
参数类型 整型
是否必填
示例值 10001
描述 10001-10008

点击下一步按钮,进入选择表和参数配置页面。在选择表项中,根据实际存放数据位置进行数据源的选择,此案例中数据源为MySQL,所以配置如下:
服务编排案例演示 - 图16

选择返回和排序参数中,选择需要返回的参数,并将参数的返回值进行排序。此处,需返回参数为user_id(用户ID)、hotel_id(酒店ID)、room_id(房间ID)。
服务编排案例演示 - 图17

添加请求参数项中设置绑定参数order_id,绑定字段。
服务编排案例演示 - 图18

配置完成后点击完成,开始测试进入测试页面。在绑定资源组选择已经创建好的API资源组,进行连通性测试。同时在请求参数处输入测试值,例如10001。
服务编排案例演示 - 图19

点击开始测试,在右侧查看测试结果,请求结果显示成功,可在返回内容处查看返回结果是否是自己预期的。在这个API当中,我们期望输入order_id,返回room_id、user_id以及hotel_id。

服务编排案例演示 - 图20

点击完成,API创建完成。

用户详情表API

同酒店订单表API类似,首先需要完成配置API信息页面的参数填写。
服务编排案例演示 - 图21

配置项 配置参数
API名称 user_info_test
API集合 酒店订单
API Path user_info_test
协议 HTTP
请求方式 GET
返回类型 JSON
超时时间 10000
描述 用户详情表API
apiToken鉴权 开启

除了配置上述信息外,还需要完成入参定义的配置。
服务编排案例演示 - 图22

配置项 配置参数
参数名 user_id
入参类型 普通入参
参数类型 整型
是否必填
示例值 1
描述 1-7

点击下一步按钮,进入选择表和参数配置页面。在选择表项中,根据实际存放数据位置进行数据源的选择,此案例中数据源为MySQL,所以配置如下:
服务编排案例演示 - 图23

选择返回和排序参数中,选择需要返回的参数,并将参数的返回值进行排序。此处,需返回参数为user_account、user_name、user_age、user_gender。
服务编排案例演示 - 图24

添加请求参数项中设置绑定参数user_id,绑定字段。
服务编排案例演示 - 图25

配置完成后点击完成,开始测试进入测试页面。在绑定资源组选择已经创建好的API资源组,进行连通性测试。同时在请求参数处输入测试值,例如1。
服务编排案例演示 - 图26

点击开始测试,在右侧查看测试结果,请求结果显示成功,可在返回内容处查看返回结果是否是自己预期的。在这个API当中,我们期望输入user_id,返回user_account、user_name、user_age及user_gender。

服务编排案例演示 - 图27

点击完成,API创建完成。

酒店详情表API

配置API信息页完成如下配置:
服务编排案例演示 - 图28

配置项 配置参数
API名称 hotel_info_test
API集合 酒店订单
API Path hotel_info_test
协议 HTTP
请求方式 GET
返回类型 JSON
超时时间 10000
描述 酒店详情表API
apiToken鉴权 开启

除了配置上述信息外,还需要完成入参定义的配置。
服务编排案例演示 - 图29

配置项 配置参数
参数名 hotel_id
入参类型 普通入参
参数类型 整型
是否必填
示例值 20001
描述 20001-20008

点击下一步按钮,进入选择表和参数配置页面。在选择表项中,根据实际存放数据位置进行数据源的选择,此案例中数据源为MySQL,所以配置如下:
服务编排案例演示 - 图30

选择返回和排序参数中,选择需要返回的参数,并将参数的返回值进行排序。此处,需返回参数为hotel_name、hotel_level、hotel_addr。
服务编排案例演示 - 图31

添加请求参数项中设置绑定参数hotel_id,绑定字段。
服务编排案例演示 - 图32

配置完成后点击完成,开始测试进入测试页面。在绑定资源组选择已经创建好的API资源组,进行连通性测试。同时在请求参数处输入测试值,例如20001。
服务编排案例演示 - 图33

点击开始测试,在右侧查看测试结果,请求结果显示成功,可在返回内容处查看返回结果是否是自己预期的。在这个API当中,我们期望输入user_id,返回hotel_name、hotel_level及hotel_addr。

服务编排案例演示 - 图34

点击完成,API创建完成。

房间详情表API

配置API信息页完成如下配置:
服务编排案例演示 - 图35

配置项 配置参数
API名称 room_info_test
API集合 酒店订单
API Path room_info_test
协议 HTTP
请求方式 GET
返回类型 JSON
超时时间 10000
描述 房间详情表API
apiToken鉴权 开启

除了配置上述信息外,还需要完成入参定义的配置。
服务编排案例演示 - 图36

配置项 配置参数
参数名 room_id
入参类型 普通入参
参数类型 整型
是否必填
示例值 1101
描述 1101,1201,1202,1601,1602,1503

点击下一步按钮,进入选择表和参数配置页面。在选择表项中,根据实际存放数据位置进行数据源的选择,此案例中数据源为MySQL,所以配置如下:
服务编排案例演示 - 图37

选择返回和排序参数中,选择需要返回的参数,并将参数的返回值进行排序。此处,需返回参数为room_style、room_floor、room_window。
服务编排案例演示 - 图38

添加请求参数项中设置绑定参数room_id,绑定字段。
服务编排案例演示 - 图39

配置完成后点击完成,开始测试进入测试页面。在绑定资源组选择已经创建好的API资源组,进行连通性测试。同时在请求参数处输入测试值,例如1201。
服务编排案例演示 - 图40

点击开始测试,在右侧查看测试结果,请求结果显示成功,可在返回内容处查看返回结果是否是自己预期的。在这个API当中,我们期望输入user_id,返回room_style、room_floor及room_window。
服务编排案例演示 - 图41

点击完成,API创建完成。

服务编排


新建完API之后开始创建服务编排,在API列表页面点击服务编排,配置信息如下:
服务编排案例演示 - 图42

配置项 配置参数
服务编排名称 hotel_order_detail_info
API集合 酒店订单
API Path hotel_order_detail_info
协议 HTTP
请求方式 GET
返回类型 JSON
超时时间 10000
描述 酒店详细信息
apiToken鉴权 开启
选择资源组 服务编排资源组(由用户事先创建完成)

点击下一步进入工作流配置页面。根据要求拖动左侧节点类型至画布进行逻辑编排,如下图:
服务编排案例演示 - 图43
其中,输出节点和聚合节点是python节点用来编写API节点之间的逻辑关系。

  • 开始
    该节点作为起始节点,需要进行入参设置,入参参数名称为order_id,参数类型为整型,示例值为10001
    服务编排案例演示 - 图44

  • 酒店订单
    该节点为API节点,需要选择hotel_order_test(酒店订单表API),选择API后,参数部分的信息会自动根据API内容进行填写。
    服务编排案例演示 - 图45

  • 输出
    该节点的输入为酒店订单节点的输出内容,即user_id、hotel_id以及room_id,由于使用规则限制,API节点下不能为API节点,因此这里需要一个python节点过渡下,并不包含具体的逻辑。
    服务编排案例演示 - 图46

import json,time,random,pickle,re,math

def handle(inputJson):
    # 入参字典
    input = json.loads(inputJson)
    # 统一用output字典封装返回结果
    output = {}
    #自定义代码区
    output =  input['data'][0]
    return json.dumps(output)
  • 用户详情
    该节点为API节点,需要选择user_info_test(用户详情表API),选择API后,参数部分的信息会自动根据API内容进行填写。
    服务编排案例演示 - 图47

  • 酒店详情表
    该节点为API节点,需要选择hotel_info_test(酒店详情表API),选择API后,参数部分的信息会自动根据API内容进行填写。
    服务编排案例演示 - 图48

  • 房间详情表
    该节点为API节点,需要选择room_info_test(房间详情表API),选择API后,参数部分的信息会自动根据API内容进行填写。
    服务编排案例演示 - 图49

  • 聚合
    由于最后的输出结果是将三个API的结果进行聚合后输出,因此此处使用python节点进行逻辑加工。
    服务编排案例演示 - 图50

import json,time,random,pickle,re,math

def handle(inputJson):
    # 入参字典
    input = json.loads(inputJson)
    # 统一用output字典封装返回结果
    output = {}
    #自定义代码区
    out1=input['42']
    out2=input['47']
    out3=input['48']
    out1=out1['data'][0]
    out2=out2['data'][0]
    out3=out3['data'][0]
    out3.update(out2)
    out3.update(out1)
    list1=[]
    list1.append(out3)
    output['data']=list1

    return json.dumps(output)

此处,需要注意的是424748这三个为上游节点的node_id,当上游只有存在多个节点时,下游可通过node_id去识别。

  • 结束
    结束节点需要输出最后的返回参数,此处需要输出user_account、user_name、user_age、user_gender、hotel_name、hotel_level、hotel_addr、room_style、room_floor及room_window。
    服务编排案例演示 - 图51

配置完所有节点后点击画布上方运行按钮服务编排案例演示 - 图52进行测试。输入测试值10001,点击开始测试
服务编排案例演示 - 图53

在运行结果处会展示返回结果,符合返回预期便可点击完成并退出
服务编排案例演示 - 图54

策略管理


创建完成后可对API和服务编排进行策略绑定。绑定前需要先完成各个策略的创建。

涉及该步骤的角色或用户:已在安全中心授予访问策略流控策略报警策略以及行级权限新建等权限的角色或用户

流控策略

在流控策略中,创建API调用限制的策略,如下:
服务编排案例演示 - 图55

创建完成后,点击绑定API进入详情页,在详情页中点击绑定API,选择需要绑定的API名称,这里选择服务编排hotel_order_detail_info。
服务编排案例演示 - 图56

访问策略

在访问策略中,创建需要加入白名单或者黑名单的IP地址,再将相关的API进行绑定。
服务编排案例演示 - 图57
创建完成后,同样绑定服务编排hotel_order_detail_info。
服务编排案例演示 - 图58

报警策略

报警策略中,系统预置错误率报警策略,当API提交发布后将自动绑定该策略。除此之外,还支持QPS、平均响应时间、慢查询(占比)、慢查询(数量)的报警策略配置,根据实际需求进行设置。

行级权限

行级权限的设置仅针对入参为必填的字段。例如,order_id当中不包含10004,则在实际用有数BI调用时会提示行级校验未通过,入参值未匹配。(此处只是演示,该步骤不包含在本案例里面)
服务编排案例演示 - 图59

应用的新建和申请


涉及该步骤的角色或用户:已在安全中心授予应用新建等权限的角色或用户

应用管理页面,点击新建应用按钮进行创建,在弹窗中输入应用名称酒店app
服务编排案例演示 - 图60

如果是应用的创建人且是API的创建人或者有相关权限的角色或用户可直接将API或服务编排绑定到应用,如果不是,则需要通过API集市进行申请。

在应用管理页面,点击左侧查看授权按钮,进入应用详情页面,绑定服务编排hotel_order_detail_info。
服务编排案例演示 - 图61

如果没有权限的用户,可前往API集市,找到需要绑定的API名称,点击申请API,填写相关信息进行申请,申请审批人为API的创建人。
服务编排案例演示 - 图62

API调用测试


由于在构建时,选择开启了apiToken,因此在填写Query Headers时需要填写versionappKey以及apiToken。其中,version为v2;appkey可从应用详情页获取;apiToken可在API详情页获取。

  • appkey:
    服务编排案例演示 - 图63

  • apiToken:
    服务编排案例演示 - 图64

同时还需要请求地址,请求地址也在API详情页获取:
服务编排案例演示 - 图65

在有数BI中填写信息如下:
服务编排案例演示 - 图66

查看返回JSON:
服务编排案例演示 - 图67