数据服务的服务编排为您提供拖拽式、可视化的工作流编排能力。您可以按照业务逻辑,以串行、并行和分支等结构编排多个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}获取对应入参值。

参数说明

节点请求参数:
  • 如果您不设置参数值,系统会默认匹配上一个节点的输出结果JSON的第一层的同名字段值,即同名映射。第一个节点则与工作流请求参数进行同名映射。
  • 如果您设置了参数值,系统会使用您设置的值。
  • 如果您要设置为上游指定节点的指定参数值,则需要使用JSONPath表达式获取参数。
常用获取参数的JSONPath表达式:
  • $.:获取上一个节点的输出。
  • $.param:获取上一个节点的输出中的param参数值。为方便获取上游任意节点的参数值,数据服务扩展了JSONPath表达式。
  • ${NODEID1}:获取ID为NODEID1的节点的输出。
  • ${START}:获取工作流的请求参数,即开始节点的输出。
  • ${NODEID1.param}:获取NODEID1节点输出中的param参数值。
节点设置输出结果:
  • $.:当前节点的输出结果。
  • $.param:当前节点的输出中的param参数值。
  • ${NODEID1.param}:获取NODEID1节点输出中的param参数值。

服务编排示例

您需要首先添加数据源,详情请参见配置数据源。本文以MySQL数据源为例:

  1. 进入数据服务页面。
    1. 登录DataWorks控制台
    2. 在左侧导航栏,单击工作空间列表
    3. 选择工作空间所在地域后,单击相应工作空间后的进入数据服务
  2. 注册API。
    本文通过注册API的方式生成一个新的API:
    1. 服务开发页面,鼠标悬停至新建图标,单击注册API
      您也可以打开相应的业务流程,右键单击API,选择新建 > 注册API
    2. 注册API对话框中,配置各项参数。详情请参见注册API
    3. 单击确认
  3. 注册函数。
    1. 服务开发页面,鼠标悬停至新建图标,单击函数 > 新建Python函数
      您也可以找到相应的业务流程,右键单击函数,选择新建 > 新建Python函数
    2. 新建Python函数对话框中,配置各项参数。
    3. 单击确认
    4. 进入函数的编辑页面,在编辑代码区域,输入以下代码。
      # -*- 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
    5. 环境配置区域,设置内存超时时间
    6. 单击工具栏中的保存图标。
  4. 创建服务编排。
    1. 服务开发页面,展开目标服务编排所在的业务流程 > 服务编排
      您也可以找到相应的业务流程,右键单击服务编排,选择服务编排
    2. 服务编排对话框中,配置各项参数。
      服务编排
      参数 描述
      API名称 支持中文、英文、数字、下划线(_),且只能以英文或中文开头,4~50个字符。
      API Path API存放的路径,例如/user
      说明 支持英文、数字、下划线(_)和连字符(-),且只能以( /) 开头,不得超过200个字符。
      协议 支持HTTPHTTPS

      如果您需要通过HTTPS协议调用API,请您发布API至网关后,在API网关控制台绑定独立域名,并上传SSL证书。详情请参见支持HTTPS

      请求方式 支持GETPOST
      返回类型 仅支持JSON返回类型。
      可见范围 包括工作空间私有
      • 工作空间:该API对本工作空间内的所有成员可见。
      • 私有:该API仅对API的负责人可见,且暂不支持授权。
        说明 如果设置可见范围为私有,在目录树中,仅自己可见,工作空间内的其他成员不可见。
      标签 标签列表中选择相应的标签。
      说明 标签名称支持汉字、英文、数字和下划线(_),您最多可以设置5个标签,且每个标签不超过20个字符。
      描述 对API进行简要描述,不得超过2000个字符。
      目标文件夹 存放服务编排的目录。
    3. 单击确认
  5. 编辑服务编排。
    1. 在服务编排的编辑页面,您可以根据如图所示的顺序拖拽对应模块并连线。
      连线
    2. 单击API1编辑节点,从选择API列表中选择注册的API名称,选中设置输出结果,并输入{"user_id":"$.data[0].id"}
      配置

      输出结果设置规则:使用JSONPath来进行处理,其中获取节点${NodeA.namea} 语法同入参规则一致。{"user_id":"$.data[0].id"}表示把当前节点的处理结果中的data数组的第一个值的id赋值给user_id。然后,输出{"user_id":"value"} 形式的JSON数据。

    3. 单击PYTHON1节点后,从选择函数列表中选择注册的函数名称。
    4. 单击SWITCH1节点后,在编辑对话框中,单击设置分支条件
      条件表达式考察上一个节点的输出,例如,${节点ID.输出值名}>1$.输出值名>1。条件表达式支持的操作符包括==!=>=、,><=<&&,、!()+-*/%
      本例中,user_id是上游输出结果,作为下游的请求参数。
      新分支1:$.user_id != 1   分支1中,上游的输出结果不等于1。
      新分支2:$.user_id == 1   分支2中,上游的输出结果等于1。
    5. 单击结束节点后,单击页面右侧的返回参数,配置返回参数。
  6. 测试服务编排。
    1. 单击页面右上方的测试
    2. API测试对话框中,单击确定
    3. 在页面下方查看运行日志运行结果