通过数据源生成API(API网关)

更新时间:
复制为 MD 格式

数据服务支持通过向导模式或脚本模式,基于已有数据源生成数据API。本文以API网关为例,指导您完成从开通网关、创建业务流程到生成并配置API的完整流程。

说明

若使用云原生API网关,操作步骤请参见创建、发布和调用API(云原生API网关)

前提条件

  • 已在工作空间管理 > 数据源管理页面配置数据源。详情请参见配置数据源

  • 数据服务需提前准备资源组,生产环境建议使用Serverless资源组,详情请参见资源组与网络连通

进入数据服务页面

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

步骤一:开通API网关并创建API分组

在创建业务流程之前,您需要先在API网关控制台完成以下准备工作。

  1. 登录API网关控制台,开通API网关服务。

  2. API网关控制台中,新建一个API分组。API分组是指针对某一个功能或场景的API集合,也是API网关对API的最小管理单元。

    重要

    API网关的地域必须与DataWorks工作空间地域一致。

步骤二:创建业务流程

数据服务基于业务流程实现以业务为单元的API开发,每个业务流程需绑定一个API分组。在生成API前,您需要先创建业务流程。

  1. 服务开发页面,单击image.png图标,选择新建业务流程

  2. 新建业务流程对话框中,配置各项参数。

    参数

    描述

    业务名称

    在所属工作空间中必须唯一。支持汉字、英文字母、数字、下划线(_),以英文字母或汉字开头,4~50个字符。

    API分组

    选择您在步骤一中创建的API分组。如果需要新建分组,请进入API网关创建。

    重要

    业务流程绑定API分组后,不支持修改。请谨慎选择。

    业务描述

    对业务流程进行描述,不能超过180个字符。

  3. 单击确定。新建完成后,您可以在业务流程列表中查看。

步骤三:选择API创建模式

数据服务支持通过向导模式脚本模式两种方式生成API。两种模式共享相同的API基础配置流程,但在查询逻辑的构建方式上有本质区别。

模式对比

功能分类

功能点

向导模式

脚本模式

查询对象

单数据源、单数据表查询

支持

支持

单数据源、多数据表关联查询

不支持

支持

查询条件

等值查询、范围查询、模糊匹配

支持(通过操作符选择)

支持(SQL语法自由定义)

MyBatis动态条件(选填参数等)

不支持

支持(高级SQL模式)

查询结果

字段值原样返回、返回结果分页

支持

支持

数学运算、聚合函数运算

不支持

支持

如何选择

  • 使用向导模式:当您只需对单张数据表进行简单的等值查询、模糊查询或范围过滤,无需编码即可可视化配置API。

  • 使用脚本模式:当您需要多表JOIN、嵌套子查询、聚合统计、动态条件拼接(如选填参数)等高级查询能力时。

说明

向导模式创建的API可以转换为脚本模式,但转换后无法回退。详见本文附录:向导模式转脚本模式

步骤四:生成API

  1. 服务开发页面,鼠标悬停至image.png图标,单击新建API > 生成API

    您也可以打开相应的业务流程,右键单击API,选择新建API > 生成API

  2. 生成API对话框中,配置各项参数。

    参数

    描述

    API 模式

    选择向导模式脚本模式。选择脚本模式时,还需进一步选择SQL 模式基础SQL高级SQL)。

    • 基础SQL:通过基础SQL语法编写查询逻辑。

    • 高级SQL:通过支持MyBatis标签的SQL语法编写查询逻辑。支持的标签类型包括:if、choose、when、otherwise、trim、foreachwhere。

    API名称

    支持中文、英文、数字、下划线(_),且只能以英文或中文开头,4~50个字符。

    APIPath

    API存放的路径,即相对于服务host的请求路径,例如/user。支持英文、数字、下划线(_)和连字符(-),以(/)开头,不超过200个字符。

    协议

    支持HTTPHTTPS

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

    请求方式

    支持GETPOST

    说明

    选择GET时,请求参数位置仅支持QUERY。选择POST时,支持QUERYBody

    返回类型

    仅支持JSON返回类型。

    可见范围

    • 工作空间:该API对本工作空间内的所有成员可见。

    • 私有:该API仅对API的负责人可见,且暂不支持授权。

    标签

    从标签列表中选择,最多5个标签,每个不超过20个字符。详情请参见创建及管理API标签

    描述

    API进行简要描述,不超过2000个字符。

    目标文件夹

    选择已创建的业务流程作为API存放目录。默认格式为:"业务流程/业务流程名称/API"。

  3. 单击确定,进入API编辑页面。

步骤五:配置API

1. 选择数据源和表

双击打开API的编辑页面,在选择表区域,配置数据源类型数据源名称数据源环境等参数。不同数据源类型的配置参数略有不同,具体以界面为准。

说明
  • 您需要提前在工作空间管理 > 数据源管理中配置好数据源,数据表下拉列表支持表名搜索。

  • 脚本模式下,必须先选择一个数据源,且仅支持同一数据源的多表关联查询。

  • 标准模式工作空间支持在数据源环境配置项选择访问开发或生产环境数据源,详情请参见工作空间模式区别

  • 对于MaxCompute数据源,可使用DataWorks数据服务的加速服务MaxComputeMCQA加速。选择加速服务时,您需要先创建加速项,详情请参见加速服务

2. 定义查询逻辑

向导模式和脚本模式在定义查询逻辑时的操作方式不同。

向导模式:选择参数

选择数据表后,选择参数区域会自动显示该表的所有字段。根据需求勾选字段的设为请求参数设为返回参数列。

如果需要对返回结果排序,单击字段后的排序按钮,将其添加至排序列表。排序列表中可添加多个字段,序号越小优先级越高,通过上移下移调整优先级,每个字段可选择升序降序

说明

若数据源类型为HBase,选择参数区域会显示表中所有列族(Family)。如需按列名查询,需点击列族操作中的添加列按钮手动添加目标列名。

脚本模式:编写查询SQL

编写查询SQL区域,输入查询SQL语句。

基础SQL模式:使用${paramName}标记请求参数。SELECT后的字段为返回参数,WHERE条件中的${param}为请求参数。

编写SQL时需遵循以下规则:

  • 支持同一数据源下的单表查询、多表关联查询和嵌套查询。

  • 不支持多条SQL语句、注释和INSERT/UPDATE/DELETE等非SELECT语法。

  • 不支持SELECT *,必须明确指定查询列。

  • 列名带表名前缀(如t.name)时,必须取别名(如t.name as name)。使用聚合函数时也必须取别名。

  • 不支持将${param}放在引号中。如需拼接字符串请使用concat('abc', ${xyz}, '123')

  • 基础SQL不支持设置参数为可选。

高级SQL模式:支持MyBatis标签语法(if、choose、when、otherwise、trim、foreach、where),可灵活实现空值校验、多值遍历、动态查表、动态排序等复杂查询逻辑。常见场景代码示例请参见本文附录:高级SQL(MyBatis语法)示例

高级SQL中使用特殊字符时需进行转义处理:

特殊字符

转义字符

含义

>

>

大于

>=

>=

大于等于

<

&lt;

小于

<=

&lt;=

小于等于

&

&amp;

'

&apos;

单引号

"

&quot;

双引号

3. 配置请求参数

单击API编辑页面右侧的请求参数,配置各项参数。

说明
  • 进行结果预览前请设置API参数的示例值、默认值、描述等信息。

  • 尽量将有索引的字段设置为请求参数。

  • 高级SQL模式下,系统无法自动解析参数,请根据SQL脚本手动新增所有请求参数至列表中。

  • 向导模式不支持对同一字段配置两个参数形成取值区间,如需此功能请使用脚本模式。

参数

描述

参数名称

支持英文、数字、下划线、连字符(-),以英文开头,不超过64个字符。

绑定字段

仅向导模式可见。默认不可修改,与所选数据表字段绑定。如需修改绑定关系,请使用脚本模式。

参数类型

支持STRING、INT、LONG、FLOAT、DOUBLE、BOOLEAN。

参数位置

QUERYBODY。选择BODY时需设置Content-Type(支持JSON、XML、FORM三种格式)。

操作符

仅向导模式可见。定义请求参数与赋值之间的比较关系,支持:=LIKEINNOT INNOT LIKE!=><>=<=

说明

当数据源类型为Table Store时,操作符仅支持=

是否必填

控制调用时该参数是否必填。

示例值

该请求参数的示例值。

默认值

该请求参数的默认值。

描述

该请求参数的简要说明。

4. 配置返回参数与分页

单击API编辑页面右侧的返回参数,配置参数名称、参数类型、示例值和描述。高级SQL模式下请根据SQL脚本手动新增所有返回参数。

高级配置区域,设置是否开启返回结果分页

  • 不开启:API默认最多返回2000条记录。

  • 开启:可在服务资源组页面根据资源组类型设置单页条数上限。

开启分页后,系统自动增加以下公共参数:

  • 公共请求参数:returnTotalNum(是否返回数据总条数)、pageNum(当前页号)、pageSize(每页记录数)。

  • 公共返回参数:pageNumpageSizetotalNum(总记录数)。

说明
  • API无请求参数,则必须开启返回结果分页。

  • 脚本模式中,若在SQL中使用了limit限制,开启分页后limit不生效,以分页配置为准。

5. 配置过滤器(可选)

当您需要对API的请求参数进行预处理或对查询结果进行二次加工时,在右侧导航栏单击过滤器,根据需要勾选使用前置过滤器使用后置过滤器,选择函数类型后选择目标函数。可添加多个函数,执行时按添加顺序处理。创建和使用过滤器详情请参见创建Aviator函数创建Python函数

说明
  • 当使用Python函数作为过滤器时,请先开通DataWorks专业版及以上版本,并使用公共数据服务资源组。

  • 当使用Aviator函数作为过滤器时,无DataWorks版本限制,但需要使用独享数据服务资源组。

  • 若在过滤器下拉列表中无法获取目标函数,请检查函数是否已发布。详情请参见发布函数

6. 配置服务资源组

在右侧导航栏单击服务资源组,配置API调用时使用的资源组类型。

支持独享服务资源组公共服务资源组。独享服务资源组可选择目标资源组名称;公共服务资源组由DataWorks内部自动维护。

说明
  • 公共服务资源组仅建议在测试场景使用,不建议在生产场景使用。

  • 若在列表中未看到目标资源组,请进入资源组列表页,将资源组与工作空间进行绑定。

环境配置区域,可设置内存超时时间单次请求数据条数上限

  • 超时时间:API网关共享实例不超过30000ms;API网关专享实例下独享资源组不超过90000ms。

    说明

    API的响应时间取决于SQL实际执行时间,请合理配置超时时间,避免因响应超时导致请求失败。

  • 单页条数上限:公共服务资源组最多2000条,独享服务资源组最多10000条。API返回结果总数暂无上限控制。

步骤六:保存并提交

单击工具栏中的保存图标,保存API后,所选资源组将在测试时生效。

后续步骤

  • 测试与发布

    • 配置API后,您可以对其进行测试。详情请参见测试API

    • 测试成功后,单击右上方的提交

    • API编辑页面的右侧导航栏中,单击版本,找到待申请版本单击申请发布跳转到申请页面,申请类型默认为发布数据服务API,填写申请原因后单击申请权限完成发布申请。

      说明

      工作空间定义审批流后需要走流程审批才可以发布API,详情请参见:审批中心概述

    • 发布API后,服务资源组的配置即可在调用API时生效。

  • 管理API:您还可以在服务开发页面左侧目录树中对目标API进行克隆和删除等操作。您也可以在服务管理页面,展开API列表,查看已发布API的详情。详情请参见查看、删除、移动、克隆、批量操作、代码搜索API

附录:向导模式转脚本模式

您可以将向导模式生成的API转换为脚本模式:

  1. 服务开发页面,展开目标API所在的业务流程 > API

  2. 双击相应的API名称,打开该API的编辑页面。

  3. 单击工具栏中的转换脚本图标。

  4. 提示对话框中,单击确定

    警告
    • 仅支持将向导模式转换为脚本模式。

    • 转换后无法回退至向导模式,请谨慎操作。

附录:高级SQL(MyBatis语法)示例

以下示例展示脚本模式下使用高级SQL编写复杂查询逻辑的常见场景。使用时请将表名、字段和查询条件替换为您的实际内容。

示例1:通过条件控制返回结果的排序方式

通过var的值决定使用哪种排序方式。

select col01,col02
from table_name
<choose>
    <when test='var == 1'>
    order by col01
    </when>
    <when test='var == 2'>
    order by col02
    </when>
    <when test='var == 3'>
    order by col01,col02
    </when>
    <when test='var == 4'>
    order by col02,col01
    </when>
</choose>

请求参数:var(类型INT,必填)。返回参数:col01col02

示例2:通过条件控制查询不同的数据表

通过var的不同取值控制查询不同的表。

select col01
from
<choose>
 <when test='var == 1'>
 table_name01
 </when>
 <when test='var == 2'>
 table_name02
 </when>
</choose>

示例3:通过判断字段值是否为空控制where查询条件

根据list集合是否为空,动态生成查询条件。若list不为null,则生成包含area字段值的查询条件。

SELECT area_id, area, amount
FROM table_name
<where>
	<if test='list!=null'>
	area in
		<foreach collection="list" open="(" close=")" separator="," item="area">
		#{area}
		</foreach>
	</if>
</where>

请求参数:list(类型STRING_LIST,必填,示例值:北京市,杭州市)。返回参数:area_idareaamount

附录:最佳实践 — 选填参数设置

在实际业务中,经常需要部分请求参数为可选——调用方可自行决定是否传入某个参数值,未传值时该参数不参与查询条件。以下以ods_user_info_d表为例,将uid设为必填参数,gender设为选填参数。

字段名称

字段类型

描述

uid

INT

用户ID

gender

STRING

性别

age_range

STRING

年龄段

zodiac

STRING

星座

向导模式实现选填参数

向导模式下实现选填参数非常简单:在选择参数区域勾选uidgender为请求参数后,在右侧请求参数面板中,将gender是否必填取消勾选即可。

  • 勾选:调用API时必须传入具体值,否则将出现参数校验异常。

  • 不勾选:调用API时允许自行选择传入或不传入。未传值时,该参数不作为查询条件。

调用效果:

  • 情况一:uidgender均传值,执行查询:

    SELECT uid, gender, age_range, zodiac
    FROM ods_user_info_d
    WHERE uid = 0016359810821
    AND gender = '女';
  • 情况二:仅uid传值,gender未传值,执行查询:

    SELECT uid, gender, age_range, zodiac
    FROM ods_user_info_d
    WHERE uid = 0016359810821;

脚本模式实现选填参数

重要

基础SQL无法实现真正的选填逻辑。即使取消勾选是否必填,未传值时将按参数 = null查询(通常返回空结果),而非忽略该条件。如需选填参数,请选择高级SQL模式。

在高级SQL模式下,通过MyBatis<if>标签实现条件判断:

SELECT uid, gender, age_range, zodiac
FROM ods_user_info_d
<where>
    <if test='gender!=null'>
    gender = ${gender}
    </if>
    and uid = ${uid}
</where>
  • <where>标签会自动处理WHERE关键字和多余的AND/OR前缀。

  • <if test='gender!=null'>表示仅当gender参数传入非空值时,才将其加入查询条件。

  • 配置完SQL后,在右侧请求参数面板中手动添加uidgender参数,并将gender是否必填取消勾选。

调用效果与向导模式一致:传值时gender条件生效,未传值时条件被跳过。

选填参数设置总结

方式

实现方法

复杂度

适用场景

向导模式

取消勾选"是否必填"

简单

单表简单查询

脚本模式(基础SQL)

不支持

脚本模式(高级SQL)

使用<if test='param!=null'>包裹条件

中等

多表关联、复杂查询