蓝鲸配置平台(bk-cmdb)批量删除项目接口实战:delete_project 参数、调用示例与源码级实现解析

发布时间:2026/10/12 3:39:58

蓝鲸配置平台(bk-cmdb)批量删除项目接口实战:delete_project 参数、调用示例与源码级实现解析 后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本文围绕蓝鲸智云配置平台bk-cmdb对外开放的批量删除项目接口batch_delete_project内部路由/deletemany/project展开完整介绍其版本要求、权限前提、请求参数、调用与响应示例并结合仓库源码剖析参数校验、事务删除与权限点定义等底层实现。读完本文你将能够正确构造请求体完成项目批量删除并在出错时依据错误码与源码快速定位原因。一、接口概述版本、权限与调用路径批量删除项目接口用于一次性删除配置平台CC中的多个项目Project记录。根据接口文档 batch_delete_project.md 的说明该接口具备以下约束约束项说明版本要求v3.10.23权限要求需要“项目的删除权限”项目删除请求方法DELETE网关路径/api/v3/deletemany/project内部路由/deletemany/project在蓝鲸 API 网关的资源定义文件 bk_apigw_resources_bk-cmdb.yaml 中该资源被标记为operationId: batch_delete_project、description: 批量删除项目其后端以HTTP delete方式透传到 CMDB 内部路径/api/v3/deletemany/project。值得注意的是该资源isPublic: false非公共资源、allowApplyPermission: true意味着调用方需要申请并获得对应权限后才能调用。二、请求参数说明该接口仅有一个请求参数全部参数均放在请求体中参数名称参数类型必选描述idsarray是项目在 CC 中的 id 唯一标识数组一次请求最多传 200 个请求体的 Go 结构体定义位于 src/common/metadata/toposerver.go// DeleteProjectOption delete project option type DeleteProjectOption struct { IDs []int64 json:ids }其中ids是int64类型的数组对应配置平台内部为项目生成的数值型唯一标识即项目实例的bk_inst_id。结构体上还提供了Validate()校验方法其校验规则与文档中的“一次最多 200 个”完全对应// Validate validate DeleteProjectOption func (p *DeleteProjectOption) Validate() ccErr.RawErrorInfo { if len(p.IDs) 0 { return ccErr.RawErrorInfo{ ErrCode: common.CCErrCommParamsNeedSet, Args: []interface{}{ids}, } } if len(p.IDs) common.BKWriteOpLimit { return ccErr.RawErrorInfo{ ErrCode: common.CCErrCommXXExceedLimit, Args: []interface{}{ids, common.BKWriteOpLimit}, } } return ccErr.RawErrorInfo{} }可以看到源码中做了两道硬性校验ids为空数组时直接报错错误码为CCErrCommParamsNeedSet参数必填缺失ids数量超过BKWriteOpLimit时报错错误码为CCErrCommXXExceedLimit参数超限。其中BKWriteOpLimit的取值在 src/common/definitions.go 中定义// BKWriteOpLimit default write operation limit BKWriteOpLimit 200即单次批量写入/删除操作的默认上限为 200这与文档“一次限制最大传 200 个”的说明完全吻合。三、请求示例3.1 请求体 JSON{ ids:[ 1, 2, 3 ] }即同时删除 id 为 1、2、3 的三个项目。3.2 完整调用示例curl通过蓝鲸 API 网关调用该接口时典型的请求如下请将示例中的网关地址与鉴权信息替换为你的实际部署值curl -X DELETE https://{apigw_host}/api/v3/deletemany/project \ -H Content-Type: application/json \ -H X-Bkapi-Authorization: {bk_app_code:{your_app_code},bk_app_secret:{your_app_secret},bk_username:{operator}} \ -d {ids:[1,2,3]}四、响应示例与响应参数说明4.1 响应示例删除成功时接口返回如下 JSON{ result: true, code: 0, data: null, message: success, permission: null, }4.2 响应参数说明参数名称参数类型描述resultbool请求成功与否。true表示请求成功false表示请求失败codeint错误编码。0表示成功0表示失败错误码messagestring请求失败时返回的错误信息permissionobject权限信息dataobject请求返回的数据关于响应结构从源码层面可以进一步确认删除成功后data恒为null。在处理器 project.go 中删除成功分支直接调用ctx.RespEntity(nil)返回不再携带任何数据。响应的通用字段结构定义在 src/common/metadata/result.go 的BaseResp中// BaseResp common result struct type BaseResp struct { Result bool json:result bson:result mapstructure:result Code int json:bk_error_code bson:bk_error_code mapstructure:bk_error_code ErrMsg string json:bk_error_msg bson:bk_error_msg mapstructure:bk_error_msg Permissions *IamPermission json:permission bson:permission mapstructure:permission }值得说明的是底层 SDK 响应结构中成功/错误字段的 JSON 标签为bk_error_code与bk_error_msg而本文档及网关对外输出以code、message命名呈现调用方解析时应以实际网关返回的字段为准permission字段对应 IAM 权限信息在权限校验失败等场景下会被填充。五、源码级实现原理从路由注册到事务删除5.1 路由注册该接口的处理器在 src/scene_server/topo_server/service/project.go 中实现为Service.DeleteProject路由注册位于 src/scene_server/topo_server/service/service_initfunc.goutility.AddHandler(rest.Action{Verb: http.MethodDelete, Path: /deletemany/project, Handler: s.DeleteProject})即 HTTPDELETE方法 路径/deletemany/project。5.2 处理器执行流程DeleteProject处理器的完整逻辑如下src/scene_server/topo_server/service/project.go#L154-L182请求体解码将请求体反序列化为metadata.DeleteProjectOption解码失败直接返回错误参数校验调用opt.Validate()执行上文所述的两道校验事务执行通过s.Engine.CoreAPI.CoreService().Txn().AutoRunTxn(...)将删除操作包裹在事务中执行保证删除过程的一致性实际删除在事务内调用s.Logics.InstOperation().DeleteInstByInstID(ctx.Kit, common.BKInnerObjIDProject, opt.IDs, false)对BKInnerObjIDProject项目对象按 id 列表执行删除。其中事务的使用意味着批量删除多个项目时若中间某个删除步骤失败整个事务会回滚避免出现“删了一半”的中间状态。5.3 底层删除逻辑DeleteInstByInstID的实现位于 src/scene_server/topo_server/logics/inst/inst.gofunc (c *commonInst) DeleteInstByInstID(kit *rest.Kit, objectID string, instID []int64, needCheckHost bool) error { if len(instID) 0 { blog.Errorf(inst id array is empty, rid: %s, kit.Rid) return nil } cond : map[string]interface{}{ common.GetInstIDField(objectID): map[string]interface{}{common.BKDBIN: instID}, } if metadata.IsCommon(objectID) { cond[common.BKObjIDField] objectID } return c.DeleteInst(kit, objectID, cond, needCheckHost) }其本质是构造{bk_inst_id: {$in: [id1, id2, ...]}}的 Mongo 查询条件再调用DeleteInst完成条件删除。因此该接口执行的是实例的直接删除物理删除一旦删除成功项目数据不可找回调用前务必确认ids列表的准确性。5.4 SDK 客户端封装对于 Go 调用方apimachinery 中提供了对应的客户端封装 src/apimachinery/toposerver/inst/project.go// DeleteProject delete project func (t *instanceClient) DeleteProject(ctx context.Context, h http.Header, opt *metadata.DeleteProjectOption) errors.CCErrorCoder { resp : new(metadata.Response) subPath : /deletemany/project err : t.client.Delete(). WithContext(ctx). Body(opt). SubResourcef(subPath). WithHeaders(h). Do(). Into(resp) if err ! nil { return errors.CCHttpError } return resp.CCError() }内部以DELETE方法、Body(opt)携带请求体调用/deletemany/project并通过resp.CCError()将网关响应统一转换为 error 返回。六、权限与限流6.1 权限点定义IAM接口文档要求调用方具备“项目的删除权限”该权限点在 IAM 初始化代码 src/ac/iam/initial_actions.go 中被注册为资源操作actions append(actions, ResourceAction{ ID: DeleteProject, Name: ActionIDNameMap[DeleteProject], NameEn: Delete Project, Type: Delete, RelatedResourceTypes: []RelateResourceType{projectResource}, RelatedActions: nil, Version: 1, })其中DeleteProject操作点 ID 的定义在 src/ac/iam/types.go// DeleteProject delete project action id DeleteProject ActionID delete_project对应的中文名称在 src/ac/iam/initial_actions.go 中为“项目删除”。因此调用方需要先在蓝鲸权限中心申请“项目删除”操作点关联项目资源类型的权限。6.2 网关限流在网关资源定义 bk_apigw_resources_bk-cmdb.yaml 中该接口挂载了bk-rate-limit限流插件pluginConfigs: - type: bk-rate-limit yaml: | rates: __default: - period: 1 tokens: 100即默认限流策略为每秒 100 个 token令牌桶高频调用时需要注意触发限流。七、集成测试佐证仓库的 topo_server 集成测试 src/test/topo_server/project_test.go 覆盖了该接口的完整调用链路It(delete project, func() { deleteOpt : metadata.DeleteProjectOption{ IDs: []int64{id1, id2}, } err : topoServerClient.Instance().DeleteProject(ctx, header, deleteOpt) Expect(err).NotTo(HaveOccurred()) })测试先通过CreateProject创建两个项目并取得返回的 id再通过DeleteProject批量删除验证了“创建 → 删除”的完整闭环可用性可作为二次开发或自测的参考样例。八、调用注意事项单次数量上限ids一次最多传 200 个超限会返回参数超限错误CCErrCommXXExceedLimit参数不可为空ids为空数组会直接返回参数必填错误CCErrCommParamsNeedSet操作不可恢复从 inst.go 的实现看该接口为直接条件删除无软删除/回收机制误删后无法通过本接口恢复请先通过list_project查询确认待删除的项目 id权限前置需要具备“项目删除”delete_project权限点且网关侧该资源为非公共资源isPublic: false需申请后方可调用事务一致性删除过程在事务内执行任一步骤失败整体回滚无需担心部分删除的中间态限流约束网关默认限流为每秒 100 次调用批量场景建议合并请求而非高频并发调用。九、相关接口延伸项目Project的管理接口在网关文档中成组出现与批量删除配套的常用接口还包括批量创建项目POST /api/v3/createmany/project对应处理器CreateProject批量更新项目PUT /api/v3/updatemany/project对应处理器UpdateProject查询项目列表POST /api/v3/findmany/project对应处理器SearchProject。三者与批量删除共同构成项目生命周期的完整管理闭环且共享同一套DeleteProjectOption/UpdateProjectOption等参数结构与 IAM 项目资源权限体系掌握本文的删除接口后可举一反三理解其余项目接口的调用方式。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台bk-cmdb批量删除 Pod 接口调用与源码级实现解析蓝鲸配置平台bk cmdb批量删除 Pod 接口调用与源码级实现解析 导读 本文围绕蓝鲸配置平台BlueKing CMDB对外 API 网关中的「批量删后端企业应用运维蓝鲸 CMDB 批量删除 Kubernetes Workload 接口详解参数、调用示例与源码实现蓝鲸 CMDB 批量删除 Kubernetes Workload 接口详解参数、调用示例与源码实现 本篇文章以蓝鲸智云配置平台BlueKing CMDBb后端企业应用运维蓝鲸配置平台 bk-cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南蓝鲸配置平台 bk cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南 本篇技术指后端企业应用运维上一篇CityPickerAndroid 省市区城市选择器搭建指南下一篇使用 devenv 构建 Nix 容器并部署到 Fly.io从配置到上线的完整实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/12 3:39:58

基于Python+Django的多功能校园网站开发实战:从需求到部署全流程

做校园网站这一类偏业务型的 Web 项目,最怕的不是功能多,而是模块之间没有规划好,写到后面数据表乱成一团,视图里全是重复代码。最近正好完整整理了一个基于 Python Django 的多功能校园网站项目,覆盖了新闻公告、课程…

2026/10/12 3:39:58

云手机核心原理与工程实践:从系统定制到低延迟串流落地方案

做过云手机项目的人,应该都体会过那种憋着一肚子草泥马的时刻:用户对着屏幕上那台“安卓手机”戳了半天,骂你“卡得像幻灯片”,但你本地测一切正常——因为问题出在云端那台真实设备上,CPU调度、GPU渲染、视频编码、网…

2026/10/12 4:55:02

【Linux系统】06 进程概念

目录 ​编辑 1 冯・诺依曼体系结构 2 操作系统 (OS) 定位 2.1 广义与狭义操作系统 2.2 OS 两大目标 2.3 系统调用 & 库函数 3 进程基础概念 & PCB (task_struct) 3.1 什么是进程 3.2 PCB task_struct(Linux 的进程控制块) 3.3 查看进程…

2026/10/12 4:55:02

年终奖不发之后:绩效目标、系数规则与激励修复策略

一进十二月,办公室的气温就跟着年终奖的消息一起浮动。今年我们公司的情况很直接:官方通知就一句话——“鉴于今年公司销量、利润率等指标未达成年终目标,所以今年没有年终激励奖”。没有展开解释,没有缓冲余地,消息一…

2026/10/12 4:55:02

【Linux系统】05 Linux开发工具(下)

目录 1 make 与 Makefile 自动化构建 1.1 为什么需要 Makefile 1.2 Makefile 基础规则 1.3 make 工具推演执行逻辑 1.4 伪目标 .PHONY 1.5 Makefile 进阶语法 自定义变量 三大自动变量(高频面试) wildcard 通配符 后缀替换 模式规则 %.o:%.c …

2026/10/12 4:50:01

page_alloc zone_statistics

zone_statistics() 是页面分配路径上用于更新 NUMA 命中/未命中统计的辅助函数。它追踪分配请求的“首选 zone”与实际分配到的 zone 之间的关系,为 /proc/vmstat 提供 numa_hit、numa_miss、numa_foreign 等计数。核心作用它的职责是:当一次分配发生在 …

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑