服务编排功能介绍

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

服务编排示例

  1. 进入数据服务页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据服务,在下拉框中选择对应工作空间后单击进入数据服务

  2. 注册API。

    本文通过注册API的方式生成一个新的API:

    1. 在左侧导航栏单击image图标,进入服务开发页面。

    2. 鼠标悬停至image图标,单击新建API > 注册API

    3. 注册API对话框中,配置各项参数。详情请参见注册API

    4. 单击确定

  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的负责人可见,且暂不支持授权。

        说明

        如果设置可见范围为私有,在目录树中,仅自己可见,工作空间内的其他成员不可见。

      标签

      标签列表中选择相应的标签,详情请参见创建及管理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. 在页面下方查看运行日志运行结果