设计时数据模型管理(DataModelDesignTimeController)¶
数据模型设计时资源管理:基于 Liquibase 的数据模型与数据源差异比较(双向)与变更应用,数据模型的增删改查。
- 接口类型:REST 资源
- 基址:
${myapps.context-path.designer:}/api/designtime/applications(类级@RequestMapping,produces = APPLICATION_JSON_VALUE) - Tag:数据模型操作模块
公共说明¶
- 鉴权:是(需 designerToken)。所有端点继承自
AbstractDesignTimeController(基类为@RestController),通过Security.getDesignerIdFromToken(request)从 designerToken JWT 中解析设计器用户。鉴权机制详见 index.md「鉴权说明」。 - 路径变量:
{applicationId}、{dataModelId}均为**明文设计时 ID**(与 designer 其他控制器一致,非 runtime 的 DES 加密密文)。 - 响应:统一
Resource(见 ../index.md「统一响应结构」)。成功errcode=0;通用异常errcode=500;新建/更新接口捕获OBPMValidateException(重名)时返回errcode=40001,errmsg为名称已经存在!。 - HTTP 方法:受
CommonSecurityFilter限制,仅允许GET/POST/HEAD/OPTIONS。 - 请求体约定:差异比较/应用类接口的请求体为原始字符串(
@RequestBody String,内容为 JSON 模板或 Liquibase changeLog XML/JSON 字符串);新建/更新接口的请求体为DataModelConfig的 JSON。 - 差异比较约定:服务端用
DataModel.parseFromJSON解析入参模板为dataModel1,再用LiquibaseAPIGenerator.generateReverseChangeLog从目标数据源反向生成dataModel2,最后用DataModelComparator.compareDataModelsToChangeLog(<从>, <到>)生成 changeLog。
1. 将数据模型变更应用到数据源¶
将传入的 Liquibase changeLog 内容直接应用到指定数据源的数据库(LiquibaseAPIGenerator.applyChangeLogToDatabase)。注意:源码 Javadoc 与 @Operation summary 均写作「比较差异」,但方法名 applyToDataSource 及实际行为是「应用 changeLog 到库」,与比较类接口(2、3)不同。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/datamodels/apply_to_datasource(完整:{designer-context}/api/designtime/applications/{applicationId}/datamodels/apply_to_datasource) - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| dataSourceId | query | string | 否 | 数据源Id(未标注 @RequestParam,按请求参数绑定;用于定位目标数据库连接) |
| changeLogContent | body | string | 是 | Liquibase changeLog 内容(XML/JSON 字符串) |
请求体¶
changeLog 字符串(原始文本,非 JSON 对象)。
响应¶
data:null(成功)。
2. 比较数据模型与数据源的差异(数据模型→数据源)¶
以入参数据模型为「从」、目标数据源反向生成的模型为「到」,生成 changeLog(即数据模型相对数据源需要追加/修改的差异)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/datamodels/datamodel_compare_datasource - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| dataSourceId | query | string | 否 | 数据源Id(未标注 @RequestParam,按请求参数绑定) |
| dataModelTemplate | body | string | 是 | 数据模型模板 JSON 字符串(由 DataModel.parseFromJSON 解析) |
请求体¶
数据模型模板 JSON 字符串。
响应¶
data:String,比较生成的 Liquibase changeLog 内容。
3. 比较数据源与数据模型的差异(数据源→数据模型)¶
以目标数据源反向生成的模型为「从」、入参数据模型为「到」,生成 changeLog(即数据源相对数据模型需要追加/修改的差异)。与端点 2 的「从/到」方向相反。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/datamodels/datasource_compare_datamodel - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| dataSourceId | query | string | 否 | 数据源Id(未标注 @RequestParam,按请求参数绑定) |
| dataModelTemplate | body | string | 是 | 数据模型模板 JSON 字符串 |
请求体¶
数据模型模板 JSON 字符串。
响应¶
data:String,比较生成的 Liquibase changeLog 内容。
4. 获取数据模型列表¶
分页获取指定应用下的数据模型列表,可按名称关键字查询。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/datamodels - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| searchword | query | string | 否 | 名称关键字(required = false) |
| pageNo | query | int | 否 | 页码(缺省 1) |
| linesPerPage | query | int | 否 | 每页条数(缺省 10) |
请求示例¶
GET /api/designtime/applications/{applicationId}/datamodels?searchword=&pageNo=1&linesPerPage=10 HTTP/1.1
响应¶
data:DataPackage<DataModelConfig>(含分页字段与 datas)。
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 10,
"rowCount": 1,
"pageNo": 1,
"pageCount": 1,
"datas": [ { "id": "...", "name": "...", "datasourceId": "...", "...": "..." } ]
},
"errors": null
}
5. 获取数据模型详情¶
按数据模型Id获取完整数据模型对象。当配置了 datasourceId 时,会联动加载并回填 dataSourceName。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/datamodels/{dataModelId} - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| dataModelId | path | string | 是 | 数据模型Id(主键) |
响应¶
data:DataModelConfig 完整对象(若 datasourceId 命中数据源,附带 dataSourceName)。
{ "errcode": 0, "errmsg": "ok", "data": { "id": "...", "name": "...", "datasourceId": "...", "dataSourceName": "...", "...": "..." }, "errors": null }
6. 新建数据模型¶
在指定应用下新建数据模型。请求体解析为 DataModelConfig,强制以路径 applicationId 覆盖 applicationid 与 parentId,经保存前重名校验后持久化。成功 HTTP 状态为 201 CREATED。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/datamodels - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| content | body | string(JSON) | 是 | 数据模型对象 JSON |
请求体¶
对应 DataModelConfig 对象 JSON(name、datasourceId、模板等)。
响应¶
data:JSONObject,仅含 id(新建数据模型Id)。重名时 errcode=40001,errmsg=名称已经存在!。
7. 更新数据模型¶
按数据模型Id更新数据模型对象(含保存前重名校验)。成功 HTTP 状态为 201 CREATED。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/{applicationId}/datamodels/{dataModelId} - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| dataModelId | path | string | 是 | 数据模型Id |
| content | body | string(JSON) | 是 | 数据模型对象 JSON |
请求体¶
对应 DataModelConfig 对象 JSON(应包含与路径一致的 id)。
响应¶
data:null(成功)。重名时 errcode=40001,errmsg=名称已经存在!。
8. 删除数据模型(可批量)¶
按数据模型Id数组批量删除数据模型(含路径信息收集)。请求体由 JsonPath 解析为 List<String>。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/{applicationId}/datamodels - 鉴权:是(需 designerToken)
- Tag:数据模型操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id |
| content | body | string(JSON) | 是 | 数据模型Id数组(JSON 数组字符串,由 JsonPath 解析为 List<String>) |
请求体¶
响应¶
data:String,固定为 "删除成功"。