蓝鲸智云配置平台(bk-cmdb)模型分类删除接口 delete_classification 实战指南
后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载delete_classification是蓝鲸智云配置平台BlueKing CMDB仓库名 bk-cmdb中用于按分类 ID 删除模型分类的开放 API。模型分类Object Classification是 CMDB 模型管理体系的第一层组织单元——模型先归属于某个分类再用于承载具体的实例数据因此删除分类时系统会强制校验分类下不得存在任何模型。本文将以 docs/apidoc/apigw/open/en/delete_classification.md 为骨架完整还原该接口的调用参数、请求/响应示例与响应字段含义并结合 topo_server 的源码实现、错误码定义与测试用例讲透其底层校验链路、审计日志机制与使用边界帮助开发者在接入或排查问题时有据可依。接口概览与适用场景模型分类删除接口的核心语义是根据创建模型分类时返回的数据记录 IDid删除对应的模型分类。其调用需要具备模型分组删除权限Model category deletion permission且只能删除空分类——若分类下已挂载模型删除将直接失败。在 CMDB 的模型管理体系中分类是比模型更高一层的逻辑分组。从源码中可以看到系统预置了若干内置分类见 src/common/metadata/classification.gobk_host_manage主机管理bk_biz_topo业务拓扑bk_organization组织架构bk_network网络bk_uncategorized未分类bk_table_classification内置表格分类自定义分类由用户通过create_classification接口创建其bk_classification_type为空字符串而内置分类该字段为inner。删除接口面向的是这些分类的数据记录 ID因此调用前通常需要先通过 search_classifications查询模型分类获取分类列表及其id再对目标分类执行删除完整接口说明可参见归档版 object_model_classify.md。接口路径与鉴权说明项目值HTTP 方法DELETE接口路径/api/v3/delete/objectclassification/{id}接口名称operationIddelete_classification所需权限模型分组删除权限该路径同时登记在蓝鲸 API 网关APIGW资源定义中见 docs/apidoc/apigw/open/bk_apigw_resources_bk-cmdb.yaml其allowApplyPermission: true表示资源支持申请权限后调用同时在服务端路由注册中对应如下声明见 src/scene_server/topo_server/service/service_business_initfunc.goutility.AddHandler(rest.Action{Verb: http.MethodDelete, Path: /delete/objectclassification/{id}, Handler: s.DeleteClassification})即{id}为路径参数通过 HTTPDELETE方法请求该路径时会进入s.DeleteClassification处理函数位于 src/scene_server/topo_server/service/object_classification.go。请求参数参数名类型必选描述idint是分类数据记录 ID注意只能删除空模型分类如果分类下有模型则删除失败。当通过蓝鲸 API 网关或 ESB 调用时请求体中还需附带网关侧的统一鉴权参数bk_app_code、bk_app_secret、bk_username或bk_token等具体可参考 docs/apidoc/cc/zh_hans/delete_classification.md 中的完整请求示例。请求示例{ id: 13 }对应的 HTTP 请求形态为DELETE /api/v3/delete/objectclassification/13从 SDK 客户端封装看src/apimachinery/toposerver/object/class.goDeleteClassification同样是把分类 ID 拼入SubResourcef(/delete/objectclassification/%s, classID)子路径后发起DELETE请求id即对应 URL 中的{id}。响应示例删除成功{ result: true, code: 0, message: success, permission: null, data: success }删除失败分类下有模型{ result: false, code: 1101029, data: null, message: There is a model under the category, not allowed to delete, permission: null }响应参数说明参数名参数类型描述resultbool请求成功与否。true请求成功false请求失败codeint错误编码。0 表示 success0 表示失败错误messagestring请求失败返回的错误信息permissionobject权限信息dataobject请求返回的数据其中data在删除成功时为字符串success失败时为null。在完整链路带网关与请求链的响应中还会额外返回request_id字段用于链路追踪见 docs/apidoc/cc/zh_hans/delete_classification.md 的返回示例。失败错误码 1101029 的完整出处删除失败响应中的错误码1101029在仓库中有完整的三级定义链错误码常量src/common/errInfo.go 中定义CCErrTopoObjectClassificationHasObject 1101029注释明确为 the object classification cant be deleted under classification中文错误信息resources/errors/common/default/topo_server.json 中对应分类下有模型不允许删除英文错误信息resources/errors/english/en/topo_server.json 中对应There is a model under the category, not allowed to delete与接口文档示例中的message完全一致。因此当调用方收到code 1101029时即可明确判定失败原因为目标分类下仍存在模型正确的处理方式是先确认该分类下的模型并迁移或删除后再重试删除分类。底层实现原理删除前的空分类校验链路接口文档只描述了只能删除空分类这一约束其底层校验逻辑在 src/scene_server/topo_server/logics/model/classification.go 的DeleteClassification方法中完整实现删除流程分为四个关键步骤按 id 查询分类以metadata.ClassificationFieldID即字段id为条件调用FindClassification确认分类存在该查询还会自动排除bk_classification_type为隐藏类型HiddenType的分类见同一文件FindClassification方法检查分类下是否挂载模型调用getClassificationObjects以bk_classification_id使用$in条件查询该分类下的全部模型ReadModel见 src/scene_server/topo_server/logics/model/classification.go非空即拒绝若查询到模型数量不为 0立即返回CCErrTopoObjectClassificationHasObject即 1101029此时不会执行任何删除动作这是只能删除空分类的源码级保证删除并记录审计校验通过后调用 CoreService 的DeleteModelClassification执行物理删除并在删除前生成、删除后保存操作审计日志auditlog.NewObjectClsAuditLog审计动作类型为AuditDelete实现见 src/common/auditlog/object_classification.go。服务层处理函数src/scene_server/topo_server/service/object_classification.go在调用该逻辑时还将其包裹在AutoRunTxn事务中执行——即删除分类操作是事务性的任一步骤失败都会整体回滚避免出现数据不一致。与创建/更新/查询逻辑的关联同一套分类操作逻辑还承载了CreateClassification、UpdateClassification、FindClassification、FindClassificationWithObjects四个方法接口定义见 src/scene_server/topo_server/logics/model/classification.go对应的 HTTP 接口分别为接口方法路径create_classificationPOST/api/v3/create/objectclassificationsearch_classificationsPOST/api/v3/find/objectclassificationsearch_classifications_objectsPOST/api/v3/find/classificationobjectupdate_classificationPUT/api/v3/update/objectclassification/{id}delete_classificationDELETE/api/v3/delete/objectclassification/{id}内置分类的删除边界从metadata常量定义src/common/metadata/classification.go和更新逻辑中的条件可以看出系统内置分类如bk_host_manage、bk_biz_topo、bk_uncategorized等承载了主机、业务等核心模型数据删除前同样受分类下不得有模型约束保护UpdateClassification中甚至通过bk_classification_id ! bk_uncategorized条件禁止修改未分类分类。可以推断内置分类因通常挂载了系统模型而天然无法被删除自定义的空分类才是该接口的主要适用对象。测试用例验证仓库中的集成测试对删除分类接口的正反两个场景都有覆盖见 src/test/topo_server/object_test.go 的 classification test空分类删除成功先创建分类cc_est_object记录为clsId2随后调用DeleteClassification(context.Background(), clsId2, header, input)断言rsp.Result true非空分类删除失败先创建分类cc_class并在其下创建模型cc_objbk_classification_id cc_class再尝试删除该分类断言rsp.Result false即接口文档中分类下有模型则删除失败的约束被测试用例直接验证。此外测试还覆盖了创建重复bk_classification_id、重复bk_classification_name会失败以及更新分类名称、查询分类列表等相邻行为可作为接入该系列接口时的回归参考。接入与排障建议删除前先查调用前使用 search_classifications 查询分类列表确认目标id有效且属于自定义分类对于bk_classification_type inner的内置分类通常不建议直接删除理解空的判定只要分类下存在任意模型包括停用模型删除即失败返回1101029需要先处理分类下的模型迁移到其他分类或删除后再重试观察审计与事务删除操作发生在事务中且会写入审计日志若在日志中看到删除动作与审计保存成对出现说明链路完整网关调用注意通过蓝鲸 API 网关调用时需携带网关统一鉴权参数bk_app_code/bk_app_secret/bk_username或bk_token并在响应中关注request_id以做全链路排障。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸智云配置平台bk-cmdb容器命名空间批量删除接口实战指南蓝鲸智云配置平台bk cmdb容器命名空间批量删除接口实战指南 本篇指南以 batch_delete_kube_namespace.md https://l后端企业应用运维蓝鲸配置平台 bk-cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南蓝鲸配置平台 bk cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南 本篇技术指后端企业应用运维蓝鲸智云配置平台bk-cmdb删除全量同步缓存条件接口实战指南蓝鲸智云配置平台bk cmdb删除全量同步缓存条件接口实战指南 导读 本文聚焦蓝鲸智云配置平台bk cmdb中用于 删除全量同步缓存条件Full S后端企业应用运维上一篇Webstudio开源可视化网站构建平台的架构解析与实现下一篇高性能图像处理库 PhotonRust 与 WebAssembly 的完美结合创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考