该功能支持客户对API的返回数据格式进行一定程度的自定义处理,原理是客户编写一个java UDF处理函数,数据服务在请求返回数据前,调用用户UDF函数处理数据后再返回。

    对于API创建者,在创建API的第二步,向导或者脚本模式下,平台均支持通过上传UDF Jar包的方式,对返回参数进行二次处理,操作步骤如下:

    1. 下载数据服务提供的的模板jar,并安装进本地maven仓库中,并在自定义UDF工程里引入该依赖。

      <dependency>
      <groupId>com.netease.hz.bdms</groupId>
      <artifactId>eds-udf</artifactId>
      <scope>provided</scope>
      <version>x.y.z</version>
      </dependency>

      其中scope为provided,不用打包到jar中可以减小用户UDF jar体积。

    2. 实现模板jar定义的ProcessingApi接口中的process方法,该方法的实现就是处理返回数据的逻辑。process方法定义:

    List<Map<String, Object>> process(HashMap<String, Object> parameter, List<Map<String, Object>> data);

    其中parameter是包含普通入参和函数入参在内的所有入参,data是返回的Result里数据部分的结果,可以进行处理后返回同样的List<Map<String, Object>>结构。例如:

    package com.demo.czh;
    
    import com.netease.hz.bdms.eds.udf.processing.ProcessingApi;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 实现ProcessingApi接口定义的process方法
     */
    public class TestDemo implements ProcessingApi {
    
      /**
       * 返回数据后置处理
       *
       * @param parameter 用户传入的参数集合
       * @param data      数据服务查出的原始数据
       * @return 返回一个List,表示多行数据,每行中是一个map结构
       */
      public List<Map<String, Object>> process(HashMap<String, Object> parameter,
          List<Map<String, Object>> data) {
        // 这里的逻辑是将原始data数据直接抛弃,然后自定义一行新数据,作为结果返回
        List<Map<String, Object>> result = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<>();
        map1.put("k1", "v1");
        map1.put("k2", "v2");
        result.add(map1);
        return result;
        // 用户实际的场景,可能更复杂,需要按照自己的业务逻辑,基于parameter和data再计算出自定义数据返回
      }
    }