Download OpenAPI specification:
Vega Backend Catalog(数据目录)API。
Catalog 是一个数据源连接的抽象,对应一个物理数据源(MySQL / SQL Server / OpenSearch / S3 等)
或逻辑目录(虚拟视图)。资源(Resource)按 catalog 归属注册。
SQL Server 连接器(connector_type: sqlserver)
{
"connector_type": "sqlserver",
"connector_config": {
"host": "sqlserver.example.com",
"port": 1433,
"username": "vega_reader",
"password": "<encrypted-password>",
"database": "sales",
"schemas": ["dbo", "reporting"],
"options": {
"encrypt": true,
"trustservercertificate": false,
"hostnameincertificate": "sqlserver.example.com",
"connection timeout": 30,
"app name": "vega-backend"
}
}
}
host、port、username、password、database 必填;schemas 为空时发现当前账号可见的非系统 schema。options 仅允许 encrypt、trustservercertificate、hostnameincertificate、
connection timeout 和 app name(名称不区分大小写);其中前两项必须是 boolean。GRANT CONNECT TO [vega_reader]、GRANT VIEW DEFINITION TO [vega_reader],以及
ALTER ROLE [db_datareader] ADD MEMBER [vega_reader];不要授予 db_datawriter、db_ddladmin 或 db_owner。trustservercertificate: true 会跳过服务端证书校验,只适合受控测试环境。
未配置 encrypt 时使用 go-mssqldb v1.9.2 的 EncryptionOff 默认行为,即客户端不主动要求全程加密;
如需确定启用 TLS,应显式配置 encrypt: true 和 trustservercertificate: false。
当前未提供自定义 CA 文件配置,TLS 成功与失败路径尚待真实 SQL Server 环境验收。可检索业务 KV(extensions,Issue #382,方案 B)
tags(最多 5 个、用于展示的短字符串列表)不同,extensions 为 扁平 string→string,
用于 DIP 等域外元数据及 列表按 key/value 筛选;持久化见 **t_entity_extension**(仅存一套行)。extensions。根对象出现 extensions 键(含 {})
即对该 catalog 做 KV 整包替换;键不出现则不修改已有 KV。include_extensions=true 时)返回 **extensions**。include_extensions=true 时返回。
可选 include_extension_keys 仅投影部分 key。extension_key/extension_value**(数组 query,style=form + explode=true),等长成对 AND。持久化(与 migrations/mariadb、migrations/dm8 惯例对齐)
t_entity_extension(不改 t_catalog / t_resource 主表结构)。f_entity_id VARCHAR(40) NOT NULL(与 t_catalog.f_id 同一取值空间、全局唯一)、
f_key VARCHAR(128) NOT NULL、f_value VARCHAR(512) NOT NULL、
f_create_time / f_update_time BIGINT(与现有表时间字段风格一致)。PRIMARY KEY (f_entity_id, f_key)(单值语义;无 f_scope 列,依赖 catalog/resource
id 全局不冲突之前提,见设计文档)。KEY idx_entity (f_entity_id);
KEY idx_entity_key_value (f_entity_id, f_key, f_value(191)) 等(前缀长度以方言上限为准)。t_entity_extension 中 f_entity_id 等于该 catalog f_id 的行;
若级联删除其下 resource,须一并删除对应 resource 的 f_entity_id 行。本文件仅包含 catalog 自身的 CRUD 与状态相关端点。跨资源的便利端点:
POST /catalogs/{id}/discover(手动发现一次) → 见 discover-task.yamlGET /catalogs/{ids}/resources(按 catalog 列资源) → 见 resource.yamlGET /catalogs/{cid}/discover-schedules(按 catalog 列调度) → 见 discover-schedule.yamlGET/PUT /catalogs/{id}/health-check-schedule(健康检查计划) → 见 catalog-health-check-schedule.yaml每个外部接口都有一一对应的内部版本,路径前缀为 /api/vega-backend/in/v1,请求体与
响应结构与外部完全一致;区别仅在于鉴权方式:外部走 OAuth Token 校验,内部从请求头
(X-Account-ID / X-Account-Type)解析访问者。
本文档仅描述外部接口。
分页获取 catalog;支持按 name、tag、type、connector_type、health_check_status 过滤。
KV 筛选:extension_key / extension_value 为数组 query。
序列化形如 extension_key=a&extension_key=b&extension_value=1&extension_value=2。参与筛选的一组参数 必须等长,
按下标配对为 AND 等值条件;长度不一致或未成对 → 400。
| name | string 按名称模糊过滤,匹配名称中包含该值的 catalog |
| tag | string 按标签精确过滤 |
| type | string Enum: "physical" "logical" 按 catalog 类型过滤 |
| connector_type | string 按连接器类型过滤 |
| health_check_status | string Enum: "healthy" "degraded" "unhealthy" "offline" "unchecked" 按健康检查状态过滤 |
| enabled | boolean 按 catalog 启用状态过滤 |
| offset | integer <int64> >= 0 Default: 0 分页偏移量,>=0,默认 0 |
| limit | integer <int64> Default: 20 每页数量,1-1000,-1 表示不分页,默认 20 |
| sort | string Default: "update_time" Enum: "name" "create_time" "update_time" 排序字段 |
| direction | string Default: "desc" Enum: "asc" "desc" 排序方向 |
| extension_key | Array of strings <= 5 items [ items <= 128 characters ] 与 |
| extension_value | Array of strings <= 5 items [ items <= 512 characters ] 与 |
| include_extensions | boolean Default: false 为 true 时列表 |
| include_extension_keys | string 逗号分隔的 key 列表;在 |
{- "entries": [
- {
- "id": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "type": "physical",
- "enabled": true,
- "internal": true,
- "connector_type": "sqlserver",
- "connector_config": { },
- "metadata": {
- "schemas": [
- "string"
]
}, - "extensions": {
- "property1": "string",
- "property2": "string"
}, - "health_check_status": "healthy",
- "last_check_time": 0,
- "health_check_result": "string",
- "creator": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "create_time": 0,
- "updater": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "update_time": 0,
- "operations": [
- "string"
]
}
], - "total_count": 0
}创建一个新的 catalog。name 全局唯一,已存在时返回 409。
connector_type 必须是已注册且 enabled 的连接器类型。
物理 Catalog 会在持久化前执行一次连接测试。默认连接失败返回 400,且不会创建 Catalog;
可传 allow_unhealthy=true 保存该 Catalog,并将其健康状态记为 unhealthy。
可选 **extensions**:与 t_catalog 插入 同一事务内写入 t_entity_extension。
响应体 CatalogRef 返回 extensions,与持久化一致。
| allow_unhealthy | boolean Default: false 是否在物理 Catalog 的连接测试失败时仍继续创建。默认 |
| id | string <= 40 characters ^[a-z0-9][a-z0-9\-_]{0,39}$ catalog ID;POST 时可省略由后端生成,PUT 时必填且必须与路径参数一致;小写字母、数字、下划线、连字符,不能以下划线开头,最大长度 40 |
| expected_update_time | integer <int64> >= 1 仅 PUT 使用的必填乐观锁版本,取自最近一次查询响应的 |
| name required | string [ 1 .. 255 ] characters catalog 名称,必填,全局唯一,最大长度 255 |
| tags | Array of strings <= 5 items [ items [ 1 .. 40 ] characters ] 标签列表(可选),最多 5 个,每个标签非空且最大长度 40,不能包含特殊字符 |
| description | string <= 1000 characters 描述,最大长度 1000 |
| enabled required | boolean 是否启用;未传按 false 处理。PUT 不允许切换该字段,启停切换请使用专用 enable/disable 接口。 |
| connector_type required | string 连接器类型标识;必须是已注册且 enabled 的类型,SQL Server 使用 |
object 连接器配置;字段由 ConnectorType.field_config 决定 | |
| internal | boolean 仅 POST 创建 logical Catalog 时可设为 |
object (EntityExtensions) <= 64 properties 扁平 KV 的 JSON object 形态( 存于 列表: 请求体(POST/PUT):根对象出现 | |
CatalogHealthCheckScheduleRequest (object) or null 可选的健康检查计划组合创建参数。仅 physical Catalog 支持;缺失或 |
{- "id": "string",
- "expected_update_time": 1,
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "enabled": true,
- "connector_type": "sqlserver",
- "connector_config": {
- "host": "sqlserver.example.com",
- "port": 1433,
- "username": "vega_reader",
- "password": "<encrypted-password>",
- "database": "sales",
- "schemas": [
- "dbo",
- "reporting"
], - "options": {
- "encrypt": true,
- "trustservercertificate": false
}
}, - "internal": true,
- "extensions": {
- "property1": "string",
- "property2": "string"
}, - "health_check_schedule": {
- "expected_update_time": 1,
- "mode": "inherit",
- "cron_expr": "string"
}
}{- "id": "string",
- "extensions": {
- "property1": "string",
- "property2": "string"
}
}路径参数支持单条或批量(逗号分隔);批量时不存在的 ID 不会报错,结果中按存在的返回。
每条 Catalog 含 **extensions**(无副表行时为 {})。
| id required | string catalog ID,多个用英文逗号分隔(如 |
{- "entries": [
- {
- "id": "string",
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "type": "physical",
- "enabled": true,
- "internal": true,
- "connector_type": "sqlserver",
- "connector_config": { },
- "metadata": {
- "schemas": [
- "string"
]
}, - "extensions": {
- "property1": "string",
- "property2": "string"
}, - "health_check_status": "healthy",
- "last_check_time": 0,
- "health_check_result": "string",
- "creator": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "create_time": 0,
- "updater": {
- "id": "string",
- "type": "string",
- "name": "string"
}, - "update_time": 0,
- "operations": [
- "string"
]
}
]
}一次只允许删除一个 catalog;路径参数包含逗号时返回 400。删除会同步移除该 catalog 下的资源、
探查计划与健康检查计划,并删除 t_entity_extension 中 f_entity_id 等于被删 catalog / resource
f_id 的行。构建索引不在此流程中清理。三类任务记录均保留:尚未开始的构建、探查和语义理解任务
标记为 cancelled;已有终态任务保持原状态。存在 running 任务时拒绝删除,
构建任务处于 stopping 时也会拒绝删除。
传入 dry_run=true 时仅执行权限、存在性和影响分析,不写入任何数据;返回该 catalog
的资源、构建任务、探查计划、健康检查计划、探查任务和语义理解任务计数;
protected_resources 返回不能随 Catalog 级联删除的 dataset/logicview 数量,blockers
返回稳定的机器可读阻断原因。can_delete 严格反映当前 DELETE 的阻断规则,调用方仍须
以不带 dry_run 的请求结果为准,因为预检与实际删除之间可能有并发变更。
| id required | string catalog ID,多个用英文逗号分隔(如 |
| dry_run | boolean Default: false 为 true 时模拟删除并返回影响报告;默认 false,执行真实删除。 |
{- "catalog_id": "string",
- "can_delete": true,
- "blockers": [
- "protected_resources"
], - "resources": 0,
- "protected_resources": 0,
- "build_tasks": {
- "will_cancel": 0,
- "blocking": 0
}, - "catalog_health_check_schedules": 0,
- "discover_schedules": 0,
- "discover_tasks": {
- "will_cancel": 0,
- "blocking": 0
}, - "semantic_understanding_tasks": {
- "will_cancel": 0,
- "blocking": 0
}
}全量更新指定 catalog。catalog 由路径参数 id 唯一确定(主键不可改)。
请求体的 id 字段必填,且必须与路径参数完全一致:
VegaBackend.InvalidParameter.ID。VegaBackend.Catalog.IDMismatch。name 改动后若新名称已被其它 catalog 占用,返回 409 VegaBackend.Catalog.NameExists。
必须传入 expected_update_time 进行乐观并发控制。该值应取自最近一次查询响应的
update_time;若 catalog 已被其他请求更新,返回 409 VegaBackend.Catalog.UpdateConflict。
enabled 不能通过 PUT 切换;请求体中的 enabled 必须与当前 catalog 状态一致。
如需启用/禁用,使用 POST /catalogs/{id}/enable 或 POST /catalogs/{id}/disable。
connector_config 可修改;修改影响发现范围的字段后,旧 Resource 会在下一次
discover 对齐时标记为 stale。
修改物理 Catalog 配置时会先执行连接测试。默认连接失败返回 400,且不会持久化更新;
可传 allow_unhealthy=true 保存更新,并将健康状态记为 unhealthy。
extensions:请求体若包含 extensions 键(含空对象 {}),则对该 catalog 整包替换
t_entity_extension 中 f_entity_id = id 的全部行;键未出现则不修改副表。
| id required | string catalog ID,多个用英文逗号分隔(如 |
| allow_unhealthy | boolean Default: false 是否在物理 Catalog 的连接测试失败时仍继续更新。默认 |
| id required | string <= 40 characters ^[a-z0-9][a-z0-9\-_]{0,39}$ catalog ID;POST 时可省略由后端生成,PUT 时必填且必须与路径参数一致;小写字母、数字、下划线、连字符,不能以下划线开头,最大长度 40 |
| expected_update_time required | integer <int64> >= 1 仅 PUT 使用的必填乐观锁版本,取自最近一次查询响应的 |
| name required | string [ 1 .. 255 ] characters catalog 名称,必填,全局唯一,最大长度 255 |
| tags | Array of strings <= 5 items [ items [ 1 .. 40 ] characters ] 标签列表(可选),最多 5 个,每个标签非空且最大长度 40,不能包含特殊字符 |
| description | string <= 1000 characters 描述,最大长度 1000 |
| enabled required | boolean 是否启用;未传按 false 处理。PUT 不允许切换该字段,启停切换请使用专用 enable/disable 接口。 |
| connector_type required | string 连接器类型标识;必须是已注册且 enabled 的类型,SQL Server 使用 |
object 连接器配置;字段由 ConnectorType.field_config 决定 | |
| internal | boolean 仅 POST 创建 logical Catalog 时可设为 |
object (EntityExtensions) <= 64 properties 扁平 KV 的 JSON object 形态( 存于 列表: 请求体(POST/PUT):根对象出现 |
{- "id": "string",
- "expected_update_time": 1,
- "name": "string",
- "tags": [
- "string"
], - "description": "string",
- "enabled": true,
- "connector_type": "sqlserver",
- "connector_config": {
- "host": "sqlserver.example.com",
- "port": 1433,
- "username": "vega_reader",
- "password": "<encrypted-password>",
- "database": "sales",
- "schemas": [
- "dbo",
- "reporting"
], - "options": {
- "encrypt": true,
- "trustservercertificate": false
}
}, - "internal": true,
- "extensions": {
- "property1": "string",
- "property2": "string"
}
}{- "error_code": "string",
- "description": "string",
- "solution": "string",
- "error_link": "string",
- "error_details": null
}启用 catalog。接口幂等:已启用的 catalog 再次启用返回 204。
从禁用切换为启用时,health_check_status 重置为 unchecked。
| id required | string catalog ID |
{- "error_code": "string",
- "description": "string",
- "solution": "string",
- "error_link": "string",
- "error_details": null
}禁用 catalog。接口幂等:已禁用的 catalog 再次禁用返回 204。
禁用不会覆盖 health_check_status,健康状态保留最近一次检查结果。
| id required | string catalog ID |
{- "error_code": "string",
- "description": "string",
- "solution": "string",
- "error_link": "string",
- "error_details": null
}使用请求中的 connector_type 与 connector_config 执行一次同步连接测试。
本接口不创建或更新 Catalog,也不持久化健康状态;适用于创建或编辑表单保存前的“测试连接”。
探测结果通过响应体 success 字段返回;目标不可达不视为 HTTP 错误:
{ success: true, message }{ success: false, message }失败时 message 保留连接器返回的诊断详情(例如主机、端口、用户名、数据库名和驱动错误),
但会替换连接器声明的密码、token 等敏感配置值,并限制异常超长的远端响应。
| connector_type required | string 已注册且 enabled 的连接器类型标识;SQL Server 使用 |
required | object 用于本次探测的连接器配置;字段由 ConnectorType.field_config 决定 |
{- "connector_type": "sqlserver",
- "connector_config": {
- "host": "sqlserver.example.com",
- "port": 1433,
- "username": "vega_reader",
- "password": "<encrypted-password>",
- "database": "sales",
- "schemas": [
- "dbo",
- "reporting"
], - "options": {
- "encrypt": true,
- "trustservercertificate": false
}
}
}{- "success": true,
- "message": "string"
}以当前持久化的 connector_config 真实建立一次到数据源的连接,验证连通性。
与 health-status(异步定时检查的最近结果)不同,本端点是同步实时探测。
调用者必须拥有目标 Catalog 的 modify 权限。
探测结果通过响应体 success 字段返回;连不通不视为 HTTP 错误:
{ success: true, message }{ success: false, message }失败时 message 保留连接器返回的诊断详情(例如主机、端口、用户名、数据库名和驱动错误),
但会替换连接器声明的密码、token 等敏感配置值,并限制异常超长的远端响应。
| id required | string catalog ID |
{- "success": true,
- "message": "string"
}