跳转至

设计时数据模型管理(DataModelDesignTimeController)

数据模型设计时资源管理:基于 Liquibase 的数据模型与数据源差异比较(双向)与变更应用,数据模型的增删改查。

  • 接口类型:REST 资源
  • 基址${myapps.context-path.designer:}/api/designtime/applications(类级 @RequestMappingproduces = 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=40001errmsg名称已经存在!
  • 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 对象)。

响应

datanull(成功)。

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": 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 字符串。

响应

dataString,比较生成的 Liquibase changeLog 内容。

{ "errcode": 0, "errmsg": "ok", "data": "<changeLog 字符串>", "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


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 字符串。

响应

dataString,比较生成的 Liquibase changeLog 内容。

{ "errcode": 0, "errmsg": "ok", "data": "<changeLog 字符串>", "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


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

响应

dataDataPackage<DataModelConfig>(含分页字段与 datas)。

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "linesPerPage": 10,
    "rowCount": 1,
    "pageNo": 1,
    "pageCount": 1,
    "datas": [ { "id": "...", "name": "...", "datasourceId": "...", "...": "..." } ]
  },
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


5. 获取数据模型详情

按数据模型Id获取完整数据模型对象。当配置了 datasourceId 时,会联动加载并回填 dataSourceName

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/{applicationId}/datamodels/{dataModelId}
  • 鉴权:是(需 designerToken)
  • Tag:数据模型操作模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 应用Id
dataModelId path string 数据模型Id(主键)

响应

dataDataModelConfig 完整对象(若 datasourceId 命中数据源,附带 dataSourceName)。

{ "errcode": 0, "errmsg": "ok", "data": { "id": "...", "name": "...", "datasourceId": "...", "dataSourceName": "...", "...": "..." }, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


6. 新建数据模型

在指定应用下新建数据模型。请求体解析为 DataModelConfig,强制以路径 applicationId 覆盖 applicationidparentId,经保存前重名校验后持久化。成功 HTTP 状态为 201 CREATED

  • 接口类型:REST 资源
  • 请求方式POST
  • 请求路径/{applicationId}/datamodels
  • 鉴权:是(需 designerToken)
  • Tag:数据模型操作模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 应用Id
content body string(JSON) 数据模型对象 JSON

请求体

对应 DataModelConfig 对象 JSON(namedatasourceId、模板等)。

{ "name": "<数据模型名称>", "datasourceId": "<数据源Id>", "...": "..." }

响应

dataJSONObject,仅含 id(新建数据模型Id)。重名时 errcode=40001errmsg=名称已经存在!

{ "errcode": 0, "errmsg": "ok", "data": { "id": "<新数据模型Id>" }, "errors": null }
失败示例(重名等校验):
{ "errcode": 40001, "errmsg": "名称已经存在!", "data": null, "errors": null }
失败示例(其他异常):
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


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)。

响应

datanull(成功)。重名时 errcode=40001errmsg=名称已经存在!

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例(重名等校验):
{ "errcode": 40001, "errmsg": "名称已经存在!", "data": null, "errors": null }
失败示例(其他异常):
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


8. 删除数据模型(可批量)

按数据模型Id数组批量删除数据模型(含路径信息收集)。请求体由 JsonPath 解析为 List<String>

  • 接口类型:REST 资源
  • 请求方式DELETE
  • 请求路径/{applicationId}/datamodels
  • 鉴权:是(需 designerToken)
  • Tag:数据模型操作模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 应用Id
content body string(JSON) 数据模型Id数组(JSON 数组字符串,由 JsonPath 解析为 List<String>

请求体

["<dataModelId1>", "<dataModelId2>"]

响应

dataString,固定为 "删除成功"

{ "errcode": 0, "errmsg": "ok", "data": "删除成功", "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }