数据服务的服务编排为您提供拖拽式、可视化的工作流编排能力。您可以按照业务逻辑,以串行、并行和分支等结构编排多个API及函数服务为工作流。
前提条件
您需要购买DataWorks企业版及以上版本,才可以使用服务编排功能。详情请参见DataWorks版本服务计费说明。
仅华东2(上海)地域支持使用服务编排功能,当前服务编排功能改造中,暂停使用,请您耐心等待功能升级改造。
背景信息
当您调用服务编排API服务时,系统将根据设定依次执行各个服务节点、传递服务节点参数并自动管理每个服务节点的状态转换。服务编排功能极大简化了多个服务之间组合调用的开发和运维成本,让您可以专注于业务本身。
服务编排的优势如下:
降低API服务开发成本
通过拖拽式、可视化的方式进行服务编排,无需额外编写代码即可完成多个API服务的串行、并行和分支调用,大大降低了API服务的开发成本。
提升服务调用性能
多个API或函数服务的调用在同一个容器实例内完成,相比您自行编写和搭建工作流服务可有效降低服务调用的网络开销,显著提升服务调用性能。
使用Serverless架构
服务编排采用Serverless架构。Serverless架构能够实现动态伸缩,您无需关注底层运行环境,只需要关注业务逻辑本身。
输入与输出规则
数据服务参数取值规则基于JSONPath。JSONPath是一种信息抽取类库,用于JSON文件中抽取指定信息。详情请参见JSONPath。
例如,对于A>B>C这3个顺序节点,节点C需要取节点A、B的输出值:
A节点输出:{"namea":"valuea"}。
取A节点输出:${A.namea}。
B节点输出:{"nameb":"valueb"}。
取B节点输出:$.nameb或${B.nameb}。
系统内置开始节点作为整个服务编排的入参。例如服务编排的入参为{"namewf":"valuewf"},则任意一个节点可通过${START.namewf}获取对应入参值。
开始节点和结束节点是服务编排的系统内置节点,您可以重命名,但无法删除。开始节点相当于当前工作流的第0个节点。
参数说明
服务编排的请求参数
单击服务编排编辑页面右侧的请求参数,您可以通过手动添加或自动解析的方式配置请求参数:
手动添加:单击新增参数,手动新增服务编排的请求参数。
自动解析:如果工作流的第1个节点是API节点,单击自动解析请求参数,您可以将该API的请求参数自动映射为服务编排的请求参数。
API节点的请求参数
单击API节点,在面板中单击输入请求参数,配置请求参数值。
如果不设置参数值,系统会默认进行同名映射,即匹配上个节点输出结果JSON的第一层的同名字段值。
说明如果当前节点是工作流的第一个节点,则请求参数值将与服务编排的请求参数值进行同名映射。
如果设置了参数值,系统会使用您设置的值。
说明如果期望设置当前节点的参数值为上游指定节点的指定参数值,则需要使用JSONPath表达式。
API节点的返回参数
单击API节点,在面板中勾选设置输出结果,并使用JSON格式自定义输出结果的表达式。示例如下。
{ "return1":"$.data.rows.user_id", "return2":"$.data.rows.user_name" }
Python节点的请求参数
单击Python节点,在请求参数编辑栏中,输入请求参数的内容。
Python节点的返回参数
单击Python节点,在面板中勾选设置输出结果,并使用JSON格式自定义输出结果的表达式。示例如下。
{ "return1":"$.data.rows.user_id", "return2":"$.data.rows.user_name" }
常用获取参数的JSONPath表达式。
JSONPath表达式 | 在请求参数中使用 | 在返回结果中使用 |
$. | 获取上个节点输出结果的根对象。 | 获取当前节点输出结果的根对象。 |
$.param | 获取上个节点输出结果中的param参数值。 | 获取当前节点输出结果中的param参数值。 |
${START} | 获取服务编排的请求参数,即开始节点的输出。 | |
${NodeID} | 获取ID为NodeID的节点的输出结果。 | |
${NodeID.param} | 获取NodeID节点输出结果中的param参数值。 |
服务编排示例
进入数据服务页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据服务,在下拉框中选择对应工作空间后单击进入数据服务。
注册API。
本文通过注册API的方式生成一个新的API:
在左侧导航栏单击图标,进入服务开发页面。
鼠标悬停至图标,单击
。在注册API对话框中,配置各项参数。详情请参见注册API。
单击确定。
注册函数。
在服务开发页面,鼠标悬停至图标,单击 。
您也可以找到相应的业务流程,右键单击函数,选择
。在新建Python函数对话框中,配置各项参数。详情请参见管理函数。
单击确认。
进入函数的编辑页面,在编辑代码区域,输入以下代码。
# -*- coding: utf-8 -*- # event (str) : in filter it is the API result, in other cases, it is your param # context : some environment information, temporarily useless # import module limit: json,time,random,pickle,re,math import json def handler(event,context): # load str to json object obj = json.loads(event) # add your code here # end add return obj
在环境配置区域,设置内存和超时时间。
单击工具栏中的图标。
创建服务编排。
在服务开发页面,鼠标悬停至图标,单击新建服务编排。
您也可以找到相应的业务流程,右键单击服务编排,选择新建服务编排。
在服务编排对话框中,配置各项参数。
参数
描述
API名称
支持中文、英文、数字、下划线(_),且只能以英文或中文开头,4~50个字符。
API Path
API存放的路径,例如/user。
说明支持英文、数字、下划线(_)和连字符(-),且只能以( /) 开头,不得超过200个字符。
协议
支持HTTP和HTTPS。
如果您需要通过HTTPS协议调用API,请您发布API至网关后,在API网关控制台绑定独立域名,并上传SSL证书。详情请参见支持HTTPS。
请求方式
支持GET和POST。
返回类型
仅支持JSON返回类型。
可见范围
包括工作空间和私有:
工作空间:该API对本工作空间内的所有成员可见。
私有:该API仅对API的负责人可见,且暂不支持授权。
说明如果设置可见范围为私有,在目录树中,仅自己可见,工作空间内的其他成员不可见。
标签
从标签列表中选择相应的标签,详情请参见创建及管理API标签。
说明标签名称支持汉字、英文、数字和下划线(_),您最多可以设置5个标签,且每个标签不超过20个字符。
描述
对API进行简要描述,不得超过2000个字符。
目标文件夹
存放服务编排的目录。
单击确认。
编辑服务编排。
在服务编排的编辑页面,您可以根据如图所示的顺序拖拽对应模块并连线。
单击API1编辑节点,从选择API列表中选择注册的API名称,选中设置输出结果,并输入
{"user_id":"$.data[0].id"}
。输出结果设置规则:使用JSONPath来进行处理,其中获取节点${NodeA.namea} 语法同入参规则一致。
{"user_id":"$.data[0].id"}
表示把当前节点的处理结果中的data数组的第一个值的id赋值给user_id。然后,输出{"user_id":"value"} 形式的JSON数据。单击PYTHON1节点后,从选择函数列表中选择注册的函数名称。
单击SWITCH1节点后,在编辑对话框中,单击设置分支条件。
条件表达式考察上一个节点的输出,例如,
${节点ID.输出值名}>1
或$.输出值名>1
。条件表达式支持的操作符包括==、!=、>=、>、<=、<、&&、!、()、+、-、*、/和%。本例中,user_id是上游输出结果,作为下游的请求参数。
新分支1:$.user_id != 1 分支1中,上游的输出结果不等于1。 新分支2:$.user_id == 1 分支2中,上游的输出结果等于1。
单击结束节点后,单击页面右侧的返回参数,配置返回参数。
测试服务编排。
单击页面右上方的测试。
在API测试对话框中,单击确定。
在页面下方查看运行日志和运行结果。