数据服务的工作流程提供了拖拽式可视化工作流编排能力,您可以将多个API及函数服务按照业务逻辑以串行、并行、分支等结构编排成工作流。工作流程整体可以形成一个复合API服务。工作流程又称服务编排功能,本文为您介绍工作流程的基本特性和用方法。

当您调用工作流程API服务时,系统将根据设定依次执行各个服务节点、传递服务节点参数并自动管理每个服务节点的状态转换。工作流程(服务编排)功能极大简化了多个服务之间组合调用的开发和运维成本,让您可以专注于业务本身。
说明 当前工作流程功能仅华东2区域支持,且需要您开通DataWorks企业版,关于企业版详情请参见DataWorks增值版本

产品优势

  • 降低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参数值。

使用示例

请您首先完成数据源的添加,参见配置数据源。undefined本例使用的是MySQL类型数据源。
  1. 注册API。
    本例中使用注册API的方式生成新的API,关于注册API的使用方法请参见注册API

  2. 注册函数。
    本例中新建一个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
  3. 服务开发页面新建工作流程

  4. 填写工作流程各项参数如下:
    • 协议HTTPHSF
    • 请求方式:支持GETPOST
    • 返回类型JSON


  5. 完成工作流程新建后 ,按照如图所示顺序拖拽对应模块并连线。

  6. 通过双击API1对节点进行编辑,选择API为您刚注册的API。
    设置输出结果{"user_id":"$.data[0].id"}

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

  7. 通过双击PYTHON1对节点进行编辑,选择函数为您刚注册的函数名称。

  8. 通过双击SWITCH2对节点进行编辑,您需要设置分支条件。条件表达式考察上一个节点的输出,示例:${节点ID.输出值名}>1$.输出值名>1。条件表达式支持的操作符包含:==!=>=、,><=<&&,、!()+-*/%

    本例中,user_id是上游输出结果,作为下游的请求参数。
    新分支1:$.user_id != 1   分支1中,上游的输出结果不等于1。
    新分支2:$.user_id == 1   分支2中,上游的输出结果等于1。
  9. 双击结束节点后单击返回参数

    配置返回参数如下所示。

  10. 单击测试

    输入测试参数。

    成功后您可以看到测试结果。