服务开发
本文为您介绍如何创建、开发、测试和发布数据服务 API。
前提条件
BLB
开通BLB
数据服务使用需开通负载均衡 BLB 服务。点击去开通。
创建实例
在负载均衡 BLB 中创建应用型实例,需通过接口创建(BLB 控制台不支持开启 underlayVip,只能调用 BCE OpenAPI)。数据服务要求关联的 BLB 实例必须开启 underlayVip,否则会导致调用请求失败。
平台在下方提供 create-blb-py2.sh 脚本,封装了"创建 + 轮询校验"的完整流程,执行后自动创建 BLB 并确认 underlayVip 生效,无需手动调用接口。
前置条件
- 本机已安装 bash、curl、openssl、python2.7(脚本会依次尝试 python2.7 / python2 / python,只要是 2.x 版本即可)
- 已获取有效的百度云 AK/SK,且该账号在目标地域有 BLB 创建权限
- 目标 VPC、子网已存在,且与要创建 BLB 的地域一致
操作步骤
- 给脚本添加可执行权限:
1chmod +x create-blb-py2.sh
- 执行创建命令,填入 BLB 名称、VPC ID、子网 ID、地域、AK、SK:
1./create-blb-py2.sh \
2 --name MyBLB \
3 --vpc-id vpc-xxxxxxx \
4 --subnet-id sbn-xxxxxxx \
5 --region bd \
6 --ak ALTAK******** \
7 --sk ******************************
--region 可选 bj(北京)/ gz(广州)/ su(苏州)/ bd(保定)/ cd(成都),须与 VPC、子网所在地域一致,否则会报 NoSuchVpc / NoSuchSubnet。
推荐用环境变量传密钥,避免明文出现在命令行历史中。
1export BCE_AK=ALTAK********
2export BCE_SK=******************************
3./create-blb-py2.sh --name MyBLB --vpc-id vpc-xxxxxxx --subnet-id sbn-xxxxxxx --region bd
- 脚本会自动创建 BLB 并轮询查询状态,直到
status变为available且underlayVip不为空,成功后输出:
1✅ BLB 创建并校验通过
2 blbId : lb-45tiisqp
3 address : 192.168.0.10 (overlay VIP)
4 underlayVip : 100.66.144.2
5 region : bd
- 记下返回的
blbId,创建数据服务 API 时需要在"应用型 BLB 实例"配置项中选择该实例。
常见问题
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
报错 SignatureDoesNotMatch |
本机时间与标准时间偏差过大,或 AK/SK 填写有误(含多余空格/换行) | 执行 date -u 核对时间;确认 AK/SK 是否正确 |
underlayVip 一直为空,最终轮询超时(默认 120 秒,可用 --poll-timeout 调整) |
目标地域账号配额已用尽 | 联系云平台,凭响应中的 X-Bce-Request-Id 排查 |
创建失败,提示 NoSuchVpc / NoSuchSubnet |
VPC/子网与 --region 不在同一地域 |
核对三者地域是否一致 |
如需在不实际创建的情况下校验参数和签名是否正确,可加 --dry-run 参数,脚本只会打印请求内容而不发送请求。
脚本内容(create-blb-py2.sh)
将下列内容保存为本地文件 create-blb-py2.sh 后按上述步骤执行即可。
1#!/usr/bin/env bash
2# =============================================================================
3# create-blb-py2.sh
4#
5# 一键创建带 underlayVip 的百度云 BLB 并校验。python2.7 兼容版。
6# 内置 BCE V1 签名算法,无外部签名工具。
7#
8# 依赖: bash 4+, curl, openssl, python2.7
9# =============================================================================
10set -euo pipefail
11
12# ---------------- 使用说明 ----------------
13usage() {
14 cat <<'EOF'
15用法:
16 create-blb-py2.sh --name NAME --vpc-id VPC_ID --subnet-id SUBNET_ID \
17 --region REGION --ak AK --sk SK [选项]
18
19必填参数:
20 --name NAME BLB 名称
21 --vpc-id VPC_ID 目标 VPC ID (需与 region 匹配)
22 --subnet-id SUBNET_ID 目标子网 ID (需与 region 匹配)
23 --region REGION 地域代码, 可选: bj|gz|su|bd|cd
24 --ak AK Access Key (或用环境变量 BCE_AK)
25 --sk SK Secret Key (或用环境变量 BCE_SK)
26
27可选参数:
28 --protocol http|https 请求协议, 默认 http
29 --expires SECONDS 签名有效期(秒), 默认 1800
30 --poll-interval S BLB 状态轮询间隔(秒), 默认 3
31 --poll-timeout S 轮询总超时(秒), 默认 120
32 --dry-run 只打印将要发送的请求与签名, 不实际请求
33 -h, --help 显示帮助
34
35地域 endpoint 对照:
36 bj -> blb.bj.baidubce.com (北京)
37 gz -> blb.gz.baidubce.com (广州)
38 su -> blb.su.baidubce.com (苏州)
39 bd -> blb.bd.baidubce.com (保定)
40 cd -> blb.cd.baidubce.com (成都)
41
42示例:
43 ./create-blb-py2.sh \
44 --name MyBlb \
45 --vpc-id vpc-xxxxxxx \
46 --subnet-id sbn-xxxxxxx \
47 --region bd \
48 --ak ALTAK******** \
49 --sk ******************************
50EOF
51}
52
53# ---------------- 参数解析 ----------------
54NAME="" ; VPC_ID="" ; SUBNET_ID="" ; REGION=""
55AK="${BCE_AK:-}" ; SK="${BCE_SK:-}"
56PROTOCOL="http"
57EXPIRES=1800
58POLL_INTERVAL=3
59POLL_TIMEOUT=120
60DRY_RUN=0
61
62while [[ $# -gt 0 ]]; do
63 case "$1" in
64 --name) NAME="$2"; shift 2;;
65 --vpc-id) VPC_ID="$2"; shift 2;;
66 --subnet-id) SUBNET_ID="$2"; shift 2;;
67 --region) REGION="$2"; shift 2;;
68 --ak) AK="$2"; shift 2;;
69 --sk) SK="$2"; shift 2;;
70 --protocol) PROTOCOL="$2"; shift 2;;
71 --expires) EXPIRES="$2"; shift 2;;
72 --poll-interval) POLL_INTERVAL="$2"; shift 2;;
73 --poll-timeout) POLL_TIMEOUT="$2"; shift 2;;
74 --dry-run) DRY_RUN=1; shift 1;;
75 -h|--help) usage; exit 0;;
76 *) echo "未知参数: $1" >&2; usage; exit 2;;
77 esac
78done
79
80# ---------------- 参数校验 ----------------
81missing=()
82for v in NAME VPC_ID SUBNET_ID REGION AK SK; do
83 [[ -z "${!v}" ]] && missing+=("$v")
84done
85if (( ${#missing[@]} > 0 )); then
86 echo "缺少必填参数: ${missing[*]}" >&2
87 usage; exit 2
88fi
89
90case "$REGION" in
91 bj|gz|su|bd|cd) ;;
92 *) echo "--region 必须是 bj|gz|su|bd|cd 之一, 实际: $REGION" >&2; exit 2;;
93esac
94
95case "$PROTOCOL" in
96 http|https) ;;
97 *) echo "--protocol 必须是 http|https, 实际: $PROTOCOL" >&2; exit 2;;
98esac
99
100HOST="blb.${REGION}.baidubce.com"
101BASE_URL="${PROTOCOL}://${HOST}"
102
103# ---------------- 依赖检查 ----------------
104# python2.7 通用别名兜底:优先 python2.7,其次 python2,再退到 python(需自身是 2.x)
105PY_BIN=""
106for candidate in python2.7 python2 python; do
107 if command -v "$candidate" >/dev/null 2>&1; then
108 # 确认是 2.x(避免 `python` 指向 3.x)
109 ver="$("$candidate" -c 'import sys;print(sys.version_info[0])' 2>/dev/null || echo 0)"
110 if [[ "$ver" == "2" ]]; then
111 PY_BIN="$candidate"
112 break
113 fi
114 fi
115done
116if [[ -z "$PY_BIN" ]]; then
117 echo "缺少依赖: python2.7 (未找到 2.x 版本的 python 解释器)" >&2
118 exit 3
119fi
120
121for cmd in curl openssl; do
122 command -v "$cmd" >/dev/null || { echo "缺少依赖: $cmd" >&2; exit 3; }
123done
124
125# ---------------- 工具函数 ----------------
126# HMAC-SHA256 十六进制输出
127# 用法: hmac_sha256_hex <key> <data>
128hmac_sha256_hex() {
129 printf '%s' "$2" | openssl dgst -sha256 -hmac "$1" | awk '{print $NF}'
130}
131
132# BCE 规范化 URL 编码
133# 用法: url_encode <string> [encode_slash: true|false]
134url_encode() {
135 "$PY_BIN" - "$1" "${2:-true}" <<'PY'
136# -*- coding: utf-8 -*-
137from __future__ import print_function
138import sys, urllib
139s = sys.argv[1]
140encode_slash = sys.argv[2].lower() == 'true'
141# BCE unreserved chars: A-Z a-z 0-9 - _ . ~
142# urllib.quote default safe='/', we explicitly pass safe set
143safe = '' if encode_slash else '/'
144# py2: passing unicode to urllib.quote raises UnicodeEncodeError, force utf-8 first
145if isinstance(s, unicode):
146 s = s.encode('utf-8')
147sys.stdout.write(urllib.quote(s, safe=safe))
148PY
149}
150
151# 生成 BCE V1 签名 Authorization
152# 用法: bce_sign <method> <uri_path> <host>
153# 输出: Authorization 头值
154bce_sign() {
155 local method="$1"
156 local uri_path="$2"
157 local host_value="$3"
158
159 local timestamp
160 timestamp="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
161
162 # 1) signingKeyStr
163 local signing_key_str="bce-auth-v1/${AK}/${timestamp}/${EXPIRES}"
164
165 # 2) signingKey = HmacSHA256(SK, signingKeyStr) → hex 字符串
166 local signing_key_hex
167 signing_key_hex="$(hmac_sha256_hex "$SK" "$signing_key_str")"
168
169 # 3) 规范化 URI (保留斜杠)
170 local canonical_uri
171 canonical_uri="$(url_encode "$uri_path" false)"
172
173 # 4) 规范化 QueryString (本脚本不使用 query 参数)
174 local canonical_query=""
175
176 # 5) 规范化 Headers (最简: 只签 host)
177 local canonical_headers
178 canonical_headers="$(url_encode "host" true):$(url_encode "$host_value" true)"
179 local signed_headers="host"
180
181 # 6) 拼接 canonical request 并做第二次 HMAC
182 local canonical_request
183 canonical_request="${method}
184${canonical_uri}
185${canonical_query}
186${canonical_headers}"
187
188 local signature
189 signature="$(hmac_sha256_hex "$signing_key_hex" "$canonical_request")"
190
191 echo "${signing_key_str}/${signed_headers}/${signature}"
192}
193
194# 解析 JSON 字段
195# 用法: json_get <json> <key>
196json_get() {
197 "$PY_BIN" -c '# -*- coding: utf-8 -*-
198from __future__ import print_function
199import sys, json
200try:
201 obj = json.loads(sys.argv[1])
202except Exception:
203 sys.exit(0)
204v = obj.get(sys.argv[2], "")
205if v is None:
206 v = ""
207# py2: v may be unicode/str/number/bool, normalize to string output
208if isinstance(v, bool):
209 v = "true" if v else "false"
210print(v)
211' "$1" "$2"
212}
213
214# ---------------- 组装创建请求体 ----------------
215BODY="$("$PY_BIN" -c '# -*- coding: utf-8 -*-
216from __future__ import print_function
217import json, sys
218print(json.dumps({
219 "name": sys.argv[1],
220 "subnetId": sys.argv[2],
221 "vpcId": sys.argv[3],
222 "allocateVip": True,
223}, separators=(",", ":")))
224' "$NAME" "$SUBNET_ID" "$VPC_ID")"
225
226# ---------------- Step 1: 创建 BLB ----------------
227echo "==> [1/2] 创建 BLB region=${REGION} host=${HOST}"
228AUTH_CREATE="$(bce_sign POST "/v1/appblb" "$HOST")"
229
230if (( DRY_RUN == 1 )); then
231 echo "---- DRY RUN 打印请求 ----"
232 echo "POST ${BASE_URL}/v1/appblb"
233 echo "Host: ${HOST}"
234 echo "Content-Type: application/json"
235 echo "Authorization: ${AUTH_CREATE}"
236 echo "Body: ${BODY}"
237 echo "-------------------------"
238 exit 0
239fi
240
241CREATE_RESP="$(curl -sS -w $'\n%{http_code}' -X POST "${BASE_URL}/v1/appblb" \
242 -H "Host: ${HOST}" \
243 -H "Content-Type: application/json" \
244 -H "Authorization: ${AUTH_CREATE}" \
245 --data "${BODY}")"
246CREATE_STATUS="$(printf '%s' "$CREATE_RESP" | tail -n1)"
247CREATE_BODY="$(printf '%s' "$CREATE_RESP" | sed '$d')"
248
249if [[ "$CREATE_STATUS" != "200" ]]; then
250 echo "❌ 创建 BLB 失败, HTTP ${CREATE_STATUS}"
251 echo "响应体: $CREATE_BODY"
252 exit 4
253fi
254
255echo "创建响应: $CREATE_BODY"
256
257BLB_ID="$(json_get "$CREATE_BODY" "blbId")"
258if [[ -z "$BLB_ID" ]]; then
259 echo "❌ 未从创建响应中解析出 blbId" >&2
260 exit 4
261fi
262echo "blbId = ${BLB_ID}"
263
264# ---------------- Step 2: 轮询详情校验 underlayVip ----------------
265echo "==> [2/2] 轮询查询 BLB 详情, 期望 status=available 且 underlayVip 非空"
266DEADLINE=$(( $(date +%s) + POLL_TIMEOUT ))
267attempt=0
268while true; do
269 attempt=$((attempt+1))
270 AUTH_GET="$(bce_sign GET "/v1/appblb/${BLB_ID}" "$HOST")"
271
272 DETAIL_RESP="$(curl -sS -w $'\n%{http_code}' -X GET "${BASE_URL}/v1/appblb/${BLB_ID}" \
273 -H "Host: ${HOST}" \
274 -H "Authorization: ${AUTH_GET}")"
275 DETAIL_STATUS="$(printf '%s' "$DETAIL_RESP" | tail -n1)"
276 DETAIL_BODY="$(printf '%s' "$DETAIL_RESP" | sed '$d')"
277
278 # 创建后短时间内 GET 可能返回 404 ResourceNotExist, 属于最终一致性窗口, 继续等待
279 if [[ "$DETAIL_STATUS" == "404" ]]; then
280 echo " [第 ${attempt} 次] 资源尚未可见 (HTTP 404 ResourceNotExist), 继续等待"
281 if (( $(date +%s) >= DEADLINE )); then
282 echo "❌ 轮询 ${POLL_TIMEOUT}s 超时, BLB 一直不可见" >&2
283 echo "最后一次响应: $DETAIL_BODY" >&2
284 exit 6
285 fi
286 sleep "$POLL_INTERVAL"
287 continue
288 fi
289
290 if [[ "$DETAIL_STATUS" != "200" ]]; then
291 echo "❌ 查询详情失败, HTTP ${DETAIL_STATUS}: $DETAIL_BODY" >&2
292 exit 5
293 fi
294
295 STATUS="$(json_get "$DETAIL_BODY" "status")"
296 UNDERLAY_VIP="$(json_get "$DETAIL_BODY" "underlayVip")"
297 ADDRESS="$(json_get "$DETAIL_BODY" "address")"
298
299 echo " [第 ${attempt} 次] status=${STATUS:-<empty>} underlayVip=${UNDERLAY_VIP:-<empty>}"
300
301 if [[ "$STATUS" == "available" && -n "$UNDERLAY_VIP" ]]; then
302 echo
303 echo "✅ BLB 创建并校验通过"
304 echo " blbId : $BLB_ID"
305 echo " address : $ADDRESS (overlay VIP)"
306 echo " underlayVip : $UNDERLAY_VIP"
307 echo " region : $REGION"
308 echo "详情: $DETAIL_BODY"
309 exit 0
310 fi
311
312 if (( $(date +%s) >= DEADLINE )); then
313 echo "❌ 轮询 ${POLL_TIMEOUT}s 超时" >&2
314 echo "最后一次响应: $DETAIL_BODY" >&2
315 exit 6
316 fi
317 sleep "$POLL_INTERVAL"
318done
API网关
开通API网关
数据服务需通过API网关转发到胜算平台的后端服务,因此需要确保当前用户或子用户已经开通了API网关服务的权限。目前在完成实名认证后即可开通,开通 API网关。
创建API网关分组
API 网关的分组管理功能可以高效地、便捷地管理一组具有关联的 API。
操作步骤:
- 登录并进入 API 网关 API GW。
- 在左侧导航栏,单击API网关-分组管理,分组管理文档。
- 单击新建分组。
- 填写分组名称和分组描述信息,单击确认,即可完成分组创建。
- 在创建完API网关分组后,会默认为每个网关分组提供一个内网域名。如需使用自定义域名,可点击下方绑定域名按钮,具体操作流程见绑定自定义域名流程。
胜算平台
- 具备数据服务模块权限及创建权限
- 计算资源:数据服务测试与实际调用需使用资源 数据处理实例-数据服务类型
创建数据服务
数据服务支持通过向导模式、脚本模式和注册 API三种方式创建 API。三种模式的基础配置流程一致,但数据来源和查询逻辑配置方式不同:
- 向导模式:通过可视化表单自动生成查询语句,适用于单表简单查询场景。
- 脚本模式:由用户编写 SQL 实现查询逻辑,适用于同一数据源内的多表关联、子查询和聚合统计等复杂查询场景。
- 注册 API:将已有的外部 API 接入数据服务统一管理。
API 基础配置流程如下:
- 登录百度胜算控制台,在选中的工作空间操作列单击打开按钮,进入空间内。
- 侧边导航依次单击数据服务>服务管理,进入数据服务页面。
- 单击创建按钮,在创建API对话框配置以下参数:
| 配置项名称 | 说明 |
|---|---|
| API 名称 | 必填,长度为 1~256 个字符,不能包含 /、\、空格或冒号(:),不能仅输入 .;同一项目文件夹路径下的 API 名称不能重复。 |
| 所属位置 | 必填,单击浏览按钮,选择 API 所属的项目文件夹路径。从工作台创建 API 时,系统默认填充对应的项目文件夹路径。 |
| API 分组 | 必填,下拉选择API网关中已存在的分组。 |
| 应用型 BLB 实例 | 必填,下拉选择应用型BLB实例,请选择上方通过接口创建的开通UnderlayIP的BLB实例,否则会导致调用请求失败。 |
| API 模式 | 必填,支持选择向导模式、脚本模式或注册 API,默认为向导模式。API 模式创建后不可变更。 |
| SQL 模式 | 仅脚本模式显示,支持选择基础 SQL 或高级 SQL,默认为基础 SQL。 |
| API Path | 必填,用于定义 API 的访问路径,必须以 / 开头,例如 /api/v1/users。 |
| 协议 | 必填,支持 HTTP 和 HTTPS,默认全选。 |
| 请求方式 | 必填,支持 GET 和 POST,默认选择 GET。 |
| 返回类型 | 必填,目前仅支持 JSON。 |
| 描述 | 非必填,用于填写 API 的功能或用途,最多支持 500 个字符。 |
- 配置完成后,单击确认,进入对应模式的 API 开发页面。
开发服务
向导模式
选择向导模式后,开发页面包含选择表、选择参数、排序字段和返回示例定义区域。具体操作步骤如下:
- 在选择表区域,依次选择数据源类型、数据源、数据库和数据表。
| 配置项名称 | 说明 |
|---|---|
| 数据源类型 | 支持选择 MySQL、Oracle、SQL Server、PostgreSQL或Doris。 |
| 数据源名称 | 选择对应类型的数据源。 |
| 数据库名称 | 选择所选数据源下的数据库。 |
| 数据表名称 | 选择所选数据库中的数据表。 |
- 在选择参数区域,展示所选数据表的所有字段信息,勾选需要设为请求参数、返回参数以及添加到排序字段的表字段;如需分页返回,可勾选返回结果分页,默认关闭;支持通过字段名快速定位字段。
开启返回结果分页后,系统将自动添加请求参数
pageSize、pageNum和返回参数pageSize、pageNum、totalNum,并按页返回数据;关闭后将一次性返回全部数据,最多返回 1000 条。建议在数据量较大时开启分页,并配置排序规则以保证结果顺序稳定。
- 在排序字段区域,展示在选择参数区域添加的排序字段。可为排序字段设置升序或降序排序方式,并支持删除已添加的排序字段;同时支持拖拽排序,长按字段左侧的拖拽按钮可调整排序字段的先后顺序。
- 在右侧请求参数区域,展示在选择参数区域设为请求参数的字段,具体配置参数如下:
| 配置项名称 | 说明 |
|---|---|
| 参数名称 | 默认为绑定字段名称,可编辑。 |
| 绑定字段 | 绑定的数据表字段名称,仅支持查看。 |
| 参数类型 | 参数数据类型,可选范围:STRING、INT、LONG、FLOAT、DOUBLE、DECIMAL、BOOLEAN,默认为左侧参数选择中对应的映射而来的字段类型。 |
| 参数位置 | 支持选择QUERY、BODY,默认为QUERY。 |
| 操作符 | 查询操作符,可选范围:默认为=。 |
| 必填 | 是否必填,默认勾选支持取消,即设定为必传参数。 |
| 示例值 | 参数示例值,请输入符合参数类型的值。 |
| 默认值 | 参数默认值,请输入符合参数类型的值。 |
| 描述 | 默认为所选字段的字段描述,支持修改参数描述。 |
- 在右侧返回参数区域,展示在选择参数区域设为返回参数的字段,具体配置参数如下:
| 配置项名称 | 说明 |
|---|---|
| 参数名称 | 默认为绑定字段名称,可编辑。 |
| 绑定字段 | 绑定的数据表字段名称,仅支持查看。 |
| 参数类型 | 参数数据类型,可选范围:STRING、INT、LONG、FLOAT、DOUBLE、DECIMAL、BOOLEAN,默认为左侧参数选择中对应的映射而来的字段类型。 |
| 示例值 | 参数示例值,请输入符合参数类型的值。 |
| 描述 | 默认为所选字段的字段描述,支持修改参数描述。 |
- 在返回示例定义区域,填写接口响应数据样例,支持单击从测试结果粘贴并简化快捷导入内容,可手动编辑JSON示例,展示接口调用成功后的数据结构、字段格式,作为接口调用参考依据。
脚本模式
选择脚本模式后,开发页面包含选择表、编写查询 SQL、请求参数、返回参数和返回示例定义区域。脚本模式支持基础 SQL和高级 SQL两种 SQL 模式:
- 基础 SQL:标准原生 SQL 语法,适用于固定查询场景。
- 高级 SQL:支持 MyBatis3 动态标签,适用于多条件、动态表、动态字段等可变查询场景。
- 在选择表区域依次选择数据源类型和数据源名称。
| 配置项名称 | 说明 |
|---|---|
| 数据源类型 | 支持选择 MySQL、Oracle、SQL Server、PostgreSQL或Doris。 |
| 数据源名称 | 选择对应类型的数据源。 |
- 在编写查询 SQL区域选择 SQL 模式并输入查询 SQL。如需分页返回,可勾选返回结果分页,默认开启;单击格式化按钮,对SQL进行美化。以下是SQL示例:
-
基础SQL
- 使用标准 SQL 语法,支持
${参数名}、#{参数名}动态传参。字段别名自动映射为返回参数名称。示例如下:
SQL1SELECT name, addr AS address, SUM(num) AS total_num 2FROM database1.table1 3WHERE user_id = ${uid} 4GROUP BY name, addr-
编写 SQL 时请注意:
- SELECT 字段将解析为返回参数,字段别名将作为返回参数名称;
- 在 WHERE 条件中使用 ${参数名} 或 #{参数名} 定义请求参数,例如 ${uid} 或 #{uid};
- 仅支持单条 SELECT 语句,不支持 SELECT * 和写操作;
- 支持单表查询、多表关联、嵌套查询和跨库查询;跨库查询时需携带数据库名称;
- SQL 编写完成后,请配置请求参数和返回参数,以便 API 调用者正确传参与解析结果。
- 使用标准 SQL 语法,支持
-
高级SQL
- 使用支持MyBatis 3标签的SQL语法,支持以下标签:if、choose、when、otherwise、where、trim、foreach。以下示例通过条件控制查询不同的数据表,var为请求参数,col01为返回参数。
SQL1select col01 2from 3<choose> 4 <when test='var == 1'> 5 table_name01 6 </when> 7 <when test='var == 2'> 8 table_name02 9 </when> 10</choose>;-
编写 SQL 时请注意:
- 仅支持单条SELECT语句,不支持SELECT*及写操作;
- 支持单表/多表/嵌套及跨库查询(需带库名);
- 编写好SQL之后,请对参数信息进行设置,以方便API调用者;
- 支持使用 ${参数名} 或#{参数名} 定义请求参数(如 ${uid}、#{uid}),MyBatis标签中的特殊字符需进行转义。
开启返回结果分页后,系统将自动添加请求参数 pageSize、pageNum 和返回参数 pageSize、pageNum、totalNum,并按页返回数据;关闭后将一次性返回全部数据,最多返回 1000 条。建议在数据量较大时开启分页,并配置排序规则以保证结果顺序稳定。
- 在右侧请求参数区域,可通过单击自动解析按钮来自动解析相关参数,也支持手动添加和校正参数,具体配置参数如下:
| 配置项名称 | 说明 |
|---|---|
| 参数名称 | 默认为解析出来的字段名称,可编辑。 |
| 参数类型 | 参数数据类型,可选范围:STRING、INT、LONG、FLOAT、DOUBLE、DECIMAL、BOOLEAN,自动解析出来的字段默认为STRING类型。 高级SQL模式下额外支持类型如下:ARRAY_STRING、ARRAY_INT、ARRAY_LONG、ARRAY_FLOAT、ARRAY_DOUBLE、ARRAY_DECIMAL、ARRAY_BOOLEAN。 |
| 参数位置 | 支持选择QUERY、BODY,默认为QUERY。 |
| 必填 | 是否必填。 |
| 示例值 | 参数示例值,请输入符合参数类型的值。 |
| 默认值 | 参数默认值,请输入符合参数类型的值。 |
| 描述 | 参数描述,支持文本输入任意内容。 |
| 操作 | 删除:单击删除该行参数。 |
- 返回参数
在右侧返回参数区域,可通过单击自动解析按钮来自动解析相关参数,也支持手动添加和校正参数,具体配置参数如下:
| 配置项名称 | 说明 |
|---|---|
| 参数名称 | 默认为解析出来的字段名称,可编辑。 |
| 参数类型 | 参数数据类型,可选范围:STRING、INT、LONG、FLOAT、DOUBLE、DECIMAL、BOOLEAN,自动解析出来的字段默认为STRING类型,你可调整参数类型,但若返回参数类型与实际数据类型不匹配时,可能导致精度丢失或转换失败,建议调整为STRING类型。 |
| 示例值 | 参数示例值,请输入符合参数类型的值。 |
| 描述 | 参数描述,支持文本输入任意内容。 |
| 操作 | 删除:单击删除该行参数。 |
- 在返回示例定义区域,填写接口响应数据样例。支持单击从测试结果粘贴并简化按钮快捷导入内容,也可手动编辑 JSON 示例,用于展示接口调用成功后的数据结构和字段格式。
注册 API
选择注册 API后,数据服务不直接生成查询 SQL,而是将已有外部 API 接入平台统一管理。开发页面包含后端服务定义、用户请求参数定义、后端请求参数定义、后端常量参数、返回参数定义、返回示例定义和错误码定义区域。具体操作步骤如下:
- 在后端服务定义区域,依次选择后台服务Host、后端服务Path、请求方式和后端超时。
| 配置项 | 说明 |
|---|---|
| 后端服务 Host | 必填。输入后端服务域名或 IP,必须以 http:// 或 https:// 开头,且不能包含 Path。 |
| 后端服务 Path | 必填。以 / 开头。支持使用方括号定义路径参数,例如 /getTaskInfo/[taskId]。 |
| 请求方式 | 必填。支持 GET 和 POST。 |
| 超时时间 | 必填,单位为 ms,默认 30000,取值范围为 10~360000。 |
注意:如果后端 Path 中定义了路径参数,必须在后端请求参数区域定义对应参数。例如 Path 为
/task_[taskId]时,需要定义taskId参数。
- 在用户请求参数区域单击添加参数,定义对外暴露给 API 调用方的参数。
| 配置项 | 说明 |
|---|---|
| 参数名称 | API 请求参数的字段名称,名称不可重复。 |
| 参数类型 | 选择参数数据类型,例如字符串、数字、布尔、数组、对象等。 |
| 参数位置 | 指定参数传递位置:请求头(Header)、查询参数(Query)、请求体(Body)。 |
| 必填 | 标识该参数是否为必传参数,可选:是 / 否。 |
| 示例值 | 参数填写参考样例,用于帮助用户快速理解格式要求。 |
| 默认值 | 调用接口未传入该参数时使用的默认取值,无默认值可留空。 |
| 描述 | 参数含义、业务作用、填写约束、特殊规则说明。 |
| 操作 | 支持对参数条目执行删除操作。 |
- 在后端请求参数区域单击添加参数,定义实际传递给后端 API 的参数,并将其绑定到用户请求参数。
| 配置项 | 说明 |
|---|---|
| 后端参数名称 | 后端接口接收的参数字段名。 |
| 后端参数位置 | 指定后端参数接收位置,可选:请求头(Header)、路径(Path)、查询参数(Query)、请求体(Body)。 |
| 对应用户请求参数名称 | 绑定前端用户传入的请求参数名称,实现参数映射。 |
| 描述 | 当前参数的业务作用、约束说明。 |
| 操作 | 支持对参数条目执行删除操作。 |
- 如果后端 API 需要接收调用方不可见的固定值,在后端常量参数区域单击添加参数,填写参数名称、参数值、参数位置和参数类型。
| 参数配置项 | 可选范围或规则 |
|---|---|
| 参数名称 | 支持英文、数字、下划线和中划线,必须以字母开头,长度为 1~128 个字符,名称不能重复。 |
| 参数类型 | STRING、INT、LONG、FLOAT、DOUBLE、BOOLEAN。 |
| 参数值 | 参数的默认值。 |
| 参数位置 | 指定后端参数接收位置,可选:QUERY、HEAD,默认为 QUERY。 |
| 描述 | 当前参数的业务作用。 |
| 操作 | 支持对参数条目执行删除操作。 |
后端请求参数名称与后端常量参数名称整体不能重复;后端 Path 中的路径参数必须与后端请求参数定义对应。
- 在返回参数定义区域单击添加参数,定义返回数据的参数名称、类型、示例值和描述。
| 配置项 | 说明 |
|---|---|
| 参数名称 | 支持英文、数字、下划线和中划线,必须以字母开头,长度为 1~128 个字符,名称不能重复。 |
| 参数类型 | STRING、INT、LONG、FLOAT、DOUBLE、BOOLEAN。 |
| 示例值 | 参数示例值。 |
| 描述 | 当前参数的业务作用。 |
| 操作 | 支持对参数条目执行删除操作。 |
- 在返回示例定义区域填写接口响应数据样例,支持单击从测试结果粘贴并简化快捷导入内容,可手动编辑JSON示例,展示接口调用成功后的数据结构、字段格式,作为接口调用参考依据。
- 在错误码定义区域单击添加,填写后端错误码、错误信息和说明。
| 配置项 | 说明 |
|---|---|
| 错误码 | 错误标识编码,列表内不可重复。 |
| 错误信息 | 返回给调用方的简短错误提示文本。 |
| 说明 | 描述错误触发场景、业务含义及相关注意事项。 |
| 操作 | 支持对参数条目执行删除操作。 |
说明:
- 注册 API 的返回参数配置用于说明返回数据结构,实际返回内容仍由后端 API 返回。
- 注册 API 发布后,平台会将其纳入数据服务统一管理,并通过平台 API 地址对外提供调用入口。外部调用方不应直接绕过平台调用后端地址。
保存API
完成服务开发和调用设置后,单击右上角的保存。API 保存成功后方可进行在线测试。
测试API
API 开发完成后,可通过在线测试验证查询逻辑和返回结果是否符合预期:
- 单击右侧的测试,进入测试界面。
- 根据已配置的请求参数填写参数值。
- 单击运行,查看返回结果和执行日志。
- 测试通过后,可在返回示例定义区域单击从测试结果粘贴并简化,将简化后的测试结果填充为返回示例。
发布API
API 测试无误后,可将其发布至线上环境供外部调用。单击右上角的发布,在发布 API 对话框中修改版本号或填写版本描述,然后单击确认发布。
发布后可在API网关页面查看到对应的API。
基本配置
打开 API 配置页面,单击右侧导航栏中的属性,可查看或修改 API 的基本信息:
| 配置项 | 说明 |
|---|---|
| API 名称 | 展示当前 API 名称,支持修改。 |
| 所属位置 | 展示当前 API 所属的工作台项目位置。 |
| API 分组 | 展示当前API的分组。 |
| 应用型 BLB 实例 | 展示当前API的BLB实例,您可对其进行相应的修改。 |
| API 模式 | 展示当前 API 模式。 |
| SQL 模式 | 脚本模式下展示当前 API 的 SQL 模式。 |
| API Path | 展示 API 访问路径,支持修改。 |
| 协议 | 展示 API 请求协议,支持修改。 |
| 请求方式 | 展示 API 请求方式,支持修改。 |
| 返回类型 | 展示 API 返回类型,支持修改。 |
| 描述 | 展示 API 描述,支持修改。 |
| API ID | 展示 API 的唯一 ID。 |
| 创建人 | 展示 API 创建人。 |
| 创建时间 | 展示 API 创建时间。 |
| 修改人 | 展示 API 最近一次修改人。 |
| 修改时间 | 展示 API 最近一次修改时间。 |
历史版本
- 在右侧历史版本区域查看按月份分组的已发布版本。
- 单击目标版本后的查看,进入版本详情页面。
- 如需恢复历史版本,单击恢复到此版本,然后在确认对话框中单击确认恢复。系统将使用该版本内容覆盖当前草稿。
评价此篇文章
