本文将为您介绍如何创建Python函数,并使用Python函数作为API的前置或后置过滤器。

背景信息

您可以在数据服务中创建函数、测试函数、发布函数,发布后的函数可被进一步关联至API,作为API的过滤器,对API的请求参数或返回结果进行加工处理,从而实现API的复杂查询需求,灵活适配各类业务场景。常见场景的代码示例请参见:使用Aviator函数作为过滤器的最佳实践

使用限制

  • 您需要购买DataWorks专业版及以上版本,才可以使用Python函数及过滤器功能。
  • Python函数需要运行在公共数据服务资源组中。
  • Python函数正在改造中,暂不支持新建、克隆和发布新的Python函数。如需使用函数功能,建议您使用Aviator函数。详情请参见创建和使用Aviator函数(过滤器)
  • 当使用函数作为API过滤器时,前置过滤器和后置过滤器的函数类型需要保持一致。即:均选择Aviator函数类型或Python函数类型。暂不支持对同一API的前置和后置过滤器选择不同的函数类型。
Python函数作为过滤器的使用限制如下:
  • 过滤器仅支持Python 3.0的语法。
  • 过滤器仅支持import json,time,random,pickle,re,math
  • 过滤器限定函数名def handler(event,context):

函数结构说明

# -*- 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
# do not modify function name
import json
def handler(event,context):
    # load str to json object
    obj = json.loads(event)
    # add your code here
    # end add
    return obj
您可以基于该函数进行修改,并根据自身需求修改函数的入参名称。
参数1[context]:字符串类型,包含API执行的上下文环境,目前为空,暂未启用。  
参数2[event]:字符串类型,包含API的请求参数,或者是上一个过滤器处理后的结果。
说明
  • 系统会将API请求参数或上个过滤器的输出结果,从key-value map转换为JSON形式,并使用该JSON对event参数进行传参,且JSON中的value仅支持字符串类型。
  • 前置过滤器的输出结果为key-value map。该输出结果将作为SQL语句执行入参,因此仅支持输出深度为1的key-value map。

创建函数

  1. 进入数据服务页面。
    1. 登录DataWorks控制台
    2. 在左侧导航栏,单击工作空间列表
    3. 选择工作空间所在地域后,单击相应工作空间后的进入数据服务
  2. 服务开发页面,鼠标悬停至新建图标,单击新建函数 > 新建Python函数
    您也可以找到相应的业务流程,右键单击函数,选择新建 > 新建Python函数
  3. 新建Python函数对话框中,配置各项参数。
    PYthon
    参数 描述
    函数名称 自定义函数的名称,不得超过256个字符。
    函数模板 仅支持Python3 Standard v1模板。
    运行环境 仅支持Python 3.0。
    函数描述 对函数进行简单描述,不得超过512个字符。
    目标文件夹 存放函数的目录。
  4. 单击确认
  5. 在函数的编辑页面,配置函数。
    1. 编辑代码区域,输入函数的代码。
    2. 环境配置区域,设置内存超时时间
  6. 单击工具栏中的保存图标。

使用函数作为API的过滤器

  1. 服务开发页面,展开目标API所在的业务流程 > API
  2. 双击相应的API名称,打开该API的编辑页面。
  3. 单击页面右侧的过滤器
    根据需要勾选使用前置过滤器使用后置过滤器,并选择函数类型Python函数后,单击前置过滤器或后置过滤器右侧的下拉框选择目标函数(可添加多个函数,执行时会按照函数的添加顺序对API参数进行处理)。
    说明
    • 过滤器由一个或多个函数组成,允许您对API的请求参数进行预处理或对查询结果进行二次加工。
    • 若在下拉列表中无法获取目标函数名称,请检查目标函数是否已发布,或尝试新建函数并发布。详情请参见发布函数
    过滤器
  4. 单击API返回结果预览,查看使用过滤器后的结果是否符合预期。