数据服务支持通过向导模式或脚本模式,基于已有数据源生成数据API。本文以API网关为例,指导您完成从开通网关、创建业务流程到生成并配置API的完整流程。
若使用云原生API网关,操作步骤请参见创建、发布和调用API(云原生API网关)。
前提条件
进入数据服务页面
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入数据服务。
步骤一:开通API网关并创建API分组
在创建业务流程之前,您需要先在API网关控制台完成以下准备工作。
-
登录API网关控制台,开通API网关服务。
-
在API网关控制台中,新建一个API分组。API分组是指针对某一个功能或场景的API集合,也是API网关对API的最小管理单元。
重要API网关的地域必须与DataWorks工作空间地域一致。
步骤二:创建业务流程
数据服务基于业务流程实现以业务为单元的API开发,每个业务流程需绑定一个API分组。在生成API前,您需要先创建业务流程。
-
在服务开发页面,单击
图标,选择新建业务流程。 -
在新建业务流程对话框中,配置各项参数。
参数
描述
业务名称
在所属工作空间中必须唯一。支持汉字、英文字母、数字、下划线(_),以英文字母或汉字开头,4~50个字符。
API分组
选择您在步骤一中创建的API分组。如果需要新建分组,请进入API网关创建。
重要业务流程绑定API分组后,不支持修改。请谨慎选择。
业务描述
对业务流程进行描述,不能超过180个字符。
-
单击确定。新建完成后,您可以在业务流程列表中查看。
步骤三:选择API创建模式
数据服务支持通过向导模式和脚本模式两种方式生成API。两种模式共享相同的API基础配置流程,但在查询逻辑的构建方式上有本质区别。
模式对比
|
功能分类 |
功能点 |
向导模式 |
脚本模式 |
|
查询对象 |
单数据源、单数据表查询 |
支持 |
支持 |
|
单数据源、多数据表关联查询 |
不支持 |
支持 |
|
|
查询条件 |
等值查询、范围查询、模糊匹配 |
支持(通过操作符选择) |
支持(SQL语法自由定义) |
|
MyBatis动态条件(选填参数等) |
不支持 |
支持(高级SQL模式) |
|
|
查询结果 |
字段值原样返回、返回结果分页 |
支持 |
支持 |
|
数学运算、聚合函数运算 |
不支持 |
支持 |
如何选择
-
使用向导模式:当您只需对单张数据表进行简单的等值查询、模糊查询或范围过滤,无需编码即可可视化配置API。
-
使用脚本模式:当您需要多表JOIN、嵌套子查询、聚合统计、动态条件拼接(如选填参数)等高级查询能力时。
向导模式创建的API可以转换为脚本模式,但转换后无法回退。详见本文附录:向导模式转脚本模式。
步骤四:生成API
-
在服务开发页面,鼠标悬停至
图标,单击。您也可以打开相应的业务流程,右键单击API,选择。
-
在生成API对话框中,配置各项参数。
参数
描述
API 模式
选择向导模式或脚本模式。选择脚本模式时,还需进一步选择SQL 模式(基础SQL或高级SQL)。
-
基础SQL:通过基础SQL语法编写查询逻辑。
-
高级SQL:通过支持MyBatis标签的SQL语法编写查询逻辑。支持的标签类型包括:if、choose、when、otherwise、trim、foreach和where。
API名称
支持中文、英文、数字、下划线(_),且只能以英文或中文开头,4~50个字符。
APIPath
API存放的路径,即相对于服务host的请求路径,例如/user。支持英文、数字、下划线(_)和连字符(-),以(/)开头,不超过200个字符。
协议
支持HTTP和HTTPS。
如果您需要通过HTTPS协议调用API,请您发布API至网关后,在API网关控制台绑定独立域名,并上传SSL证书。详情请参见支持HTTPS。
请求方式
支持GET和POST。
说明选择GET时,请求参数位置仅支持QUERY。选择POST时,支持QUERY和Body。
返回类型
仅支持JSON返回类型。
可见范围
-
工作空间:该API对本工作空间内的所有成员可见。
-
私有:该API仅对API的负责人可见,且暂不支持授权。
标签
从标签列表中选择,最多5个标签,每个不超过20个字符。详情请参见创建及管理API标签。
描述
对API进行简要描述,不超过2000个字符。
目标文件夹
选择已创建的业务流程作为API存放目录。默认格式为:"业务流程/业务流程名称/API"。
-
-
单击确定,进入API编辑页面。
步骤五:配置API
1. 选择数据源和表
双击打开API的编辑页面,在选择表区域,配置数据源类型、数据源名称和数据源环境等参数。不同数据源类型的配置参数略有不同,具体以界面为准。
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中使用特殊字符时需进行转义处理:
|
特殊字符 |
转义字符 |
含义 |
|
> |
> |
大于 |
|
>= |
>= |
大于等于 |
|
< |
< |
小于 |
|
<= |
<= |
小于等于 |
|
& |
& |
和 |
|
' |
' |
单引号 |
|
" |
" |
双引号 |
3. 配置请求参数
单击API编辑页面右侧的请求参数,配置各项参数。
-
进行结果预览前请设置API参数的示例值、默认值、描述等信息。
-
尽量将有索引的字段设置为请求参数。
-
高级SQL模式下,系统无法自动解析参数,请根据SQL脚本手动新增所有请求参数至列表中。
-
向导模式不支持对同一字段配置两个参数形成取值区间,如需此功能请使用脚本模式。
|
参数 |
描述 |
|
参数名称 |
支持英文、数字、下划线、连字符(-),以英文开头,不超过64个字符。 |
|
绑定字段 |
仅向导模式可见。默认不可修改,与所选数据表字段绑定。如需修改绑定关系,请使用脚本模式。 |
|
参数类型 |
支持STRING、INT、LONG、FLOAT、DOUBLE、BOOLEAN。 |
|
参数位置 |
QUERY或BODY。选择BODY时需设置Content-Type(支持JSON、XML、FORM三种格式)。 |
|
操作符 |
仅向导模式可见。定义请求参数与赋值之间的比较关系,支持:=、LIKE、IN、NOT IN、NOT LIKE、!=、>、<、>=、<=。 说明
当数据源类型为Table Store时,操作符仅支持=。 |
|
是否必填 |
控制调用时该参数是否必填。 |
|
示例值 |
该请求参数的示例值。 |
|
默认值 |
该请求参数的默认值。 |
|
描述 |
该请求参数的简要说明。 |
4. 配置返回参数与分页
单击API编辑页面右侧的返回参数,配置参数名称、参数类型、示例值和描述。高级SQL模式下请根据SQL脚本手动新增所有返回参数。
在高级配置区域,设置是否开启返回结果分页:
-
不开启:API默认最多返回2000条记录。
-
开启:可在服务资源组页面根据资源组类型设置单页条数上限。
开启分页后,系统自动增加以下公共参数:
-
公共请求参数:returnTotalNum(是否返回数据总条数)、pageNum(当前页号)、pageSize(每页记录数)。
-
公共返回参数:pageNum、pageSize、totalNum(总记录数)。
-
若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的编辑页面。
-
单击工具栏中的
图标。 -
在提示对话框中,单击确定。
警告-
仅支持将向导模式转换为脚本模式。
-
转换后无法回退至向导模式,请谨慎操作。
-
附录:高级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,必填)。返回参数:col01、col02。
示例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_id、area、amount。
附录:最佳实践 — 选填参数设置
在实际业务中,经常需要部分请求参数为可选——调用方可自行决定是否传入某个参数值,未传值时该参数不参与查询条件。以下以ods_user_info_d表为例,将uid设为必填参数,gender设为选填参数。
|
字段名称 |
字段类型 |
描述 |
|
uid |
INT |
用户ID |
|
gender |
STRING |
性别 |
|
age_range |
STRING |
年龄段 |
|
zodiac |
STRING |
星座 |
向导模式实现选填参数
向导模式下实现选填参数非常简单:在选择参数区域勾选uid和gender为请求参数后,在右侧请求参数面板中,将gender的是否必填取消勾选即可。
-
勾选:调用API时必须传入具体值,否则将出现参数校验异常。
-
不勾选:调用API时允许自行选择传入或不传入。未传值时,该参数不作为查询条件。
调用效果:
-
情况一:
uid和gender均传值,执行查询: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后,在右侧请求参数面板中手动添加
uid和gender参数,并将gender的是否必填取消勾选。
调用效果与向导模式一致:传值时gender条件生效,未传值时条件被跳过。
选填参数设置总结
|
方式 |
实现方法 |
复杂度 |
适用场景 |
|
向导模式 |
取消勾选"是否必填" |
简单 |
单表简单查询 |
|
脚本模式(基础SQL) |
不支持 |
— |
— |
|
脚本模式(高级SQL) |
使用 |
中等 |
多表关联、复杂查询 |