后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本篇以 docs/apidoc/apigw/open/en/batch_create_project.md 为核心结合 bk-cmdb 源码完整讲解通过 API 网关批量创建项目Project的请求参数、枚举取值、调用示例与底层实现原理。读完可掌握POST /api/v3/createmany/project的完整调用姿势、字段约束如 200 条上限、32 位 UUID 规则、响应结构ids 与请求顺序一致并能从源码层面理解其事务、审计与权限注册机制。一、接口概览适用版本与权限要求batch_create_project批量创建项目是 bk-cmdb 通过蓝鲸 API 网关APIGateway对外暴露的 Open API用于一次性创建多个项目实例。接口路径POST /api/v3/createmany/project对外网关路径拓扑服务内部路由为POST /createmany/project见 service_initfunc.go最低版本v3.10.23原文档明确标注所需权限项目创建权限Project creation permission支持协议JSON over HTTP POST该接口在 API 网关资源定义文件 bk_apigw_resources_bk-cmdb.yaml 中声明operationId为batch_create_project后端直连post /api/v3/createmany/project并配置了默认限流bk-rate-limit__default每 1 秒 100 个 token。二、请求参数详解请求体为一个 JSON 对象仅包含一个必填字段dataNameTypeRequiredDescriptiondataarray是项目数组单次最多创建 200 个data上限 200 在源码中得到印证toposerver.go 中CreateProjectOption.Validate()使用common.BKWriteOpLimit校验该常量定义在 definitions.go// BKWriteOpLimit default write operation limit BKWriteOpLimit 200超出上限会返回CCErrCommXXExceedLimit超出数量限制错误。data 数组元素字段每个数组元素代表一个待创建的项目字段如下NameTypeRequiredDescriptionbk_project_idstring否项目 ID。若传入必须是32 位、不含连字符的 UUID若不传系统自动生成bk_project_namestring是项目名称bk_project_codestring是项目英文名编码bk_project_descstring否项目描述bk_project_typeenum否项目类型默认值otherbk_project_sec_lvlenum否保密级别默认值publicbk_project_ownerstring是项目负责人bk_project_teamarray否所属团队bk_project_iconstring否项目图标图片 URL字段名与类型均可在 definitions.go 中找到对应常量定义BKProjectIDField、BKProjectNameField等说明这些字段是 project 模型的内置属性。必填字段说明从字段属性定义add_project.go可以看出模型的属性约束bk_project_name、bk_project_code、bk_project_owner、bk_project_type在模型层面均为IsRequired: true与 API 文档的必填标注一致bk_project_name、bk_project_code还带有IsOnly: true唯一约束对应 MongoDB 中的唯一索引bk_project_owner属性类型为FieldTypeUser且IsMultiple: true即负责人为用户类型字段可多选bk_project_team为FieldTypeOrganization组织架构类型IsMultiple: true即所属团队可传多个。三、枚举字段取值与默认值bk_project_type项目类型枚举定义位于 add_project.go枚举值含义mobile_game手游pc_game端游web_game页游platform_prod平台产品support_prod支撑产品other其他默认值IsDefault: truebk_project_sec_lvl保密级别枚举定义位于 add_project.go枚举值含义public公开默认值IsDefault: trueprivate私有classified机密补充项目状态字段项目模型还包含bk_project_status枚举enable启用disabled未启用默认enable由系统维护创建时可不必显式传入。四、请求示例可直接复制运行原文档给出的完整请求体如下{ data: [ { bk_project_id: 21bf9ef9be7c4d38a1d1f2uc0b44a8f2, bk_project_name: test, bk_project_code: test, bk_project_desc: test project, bk_project_type: mobile_game, bk_project_sec_lvl: public, bk_project_owner: admin, bk_project_team: [1, 2], bk_project_icon: https://127.0.0.1/file/png/11111 } ] }使用要点bk_project_id示例为 32 位字符串无连字符传入时必须符合该格式否则校验失败bk_project_team传的是组织团队ID 数组单元素数组同样适用数组内可放多个项目对象实现批量创建。五、响应示例与字段说明原文档给出的成功响应{ result: true, code: 0, message: success, permission: null, data: { ids: [1] } }响应参数总表NameTypeDescriptionresultbool请求是否成功。true成功false失败codeint错误码。0 表示成功0 表示失败错误messagestring请求失败时返回的错误信息permissionobject权限信息dataobject请求返回的数据data.idsNameTypeDescriptionidsarray项目在 CMDB 中的唯一标识ID数组关键注意点原文档明确提示返回的ids数组顺序与请求参数data数组顺序一一对应。这意味着批量创建后可以按下标直接关联请求的第 N 个项目 ↔ 返回的第 N 个 ID便于后续回填和二次操作如更新、删除。响应结构在源码中对应metadata.ProjectDataResp{IDs []int64}见 toposerver.go接口处理器返回ctx.RespEntity(metadata.ProjectDataResp{IDs: ids})project.go。六、底层实现原理从网关到存储的完整调用链1. 路由注册拓扑服务topo_server在启动时注册路由service_initfunc.goutility.AddHandler(rest.Action{Verb: http.MethodPost, Path: /createmany/project, Handler: s.CreateProject})2. 服务层处理器CreateProject处理器project.go的执行流程将请求体反序列化为metadata.CreateProjectOption调用opt.Validate()校验data非空、条数 ≤ 200在**数据库事务AutoRunTxn**中调用ProjectOperation().CreateProject返回ProjectDataResp{IDs: ids}。整个创建过程被事务包裹任一项目创建失败会整体回滚保证批量创建的原子性。3. 逻辑层ID 生成、批量入库、审计与 IAM 注册核心逻辑在 logics/inst/project.goID 自动生成遍历data若某元素未传bk_project_id则调用uuid.New()生成 UUID 并去掉连字符strings.Replace(uuid.New().String(), -, , -1)这与文档32 位无连字符 UUID不传则系统自动生成完全对应批量入库构造metadata.BatchCreateModelInstOption调用CoreService().Instance().BatchCreateInstance目标模型为common.BKInnerObjIDProject即项目作为 CMDB 的一个内置模型实例存储数量一致性校验若返回的resp.IDs数量与data数量不一致直接报错the number of project creation is inconsistent审计日志为每个创建的项目生成AuditCreate审计日志并保存IAM 权限注册若系统启用了鉴权auth.EnableAuthorize()会把新项目批量注册到 IAM 资源创建者动作中BatchRegisterResourceCreatorAction将创建者与项目实例关联。4. SDK 封装Go SDK 侧封装为instanceClient.CreateProjectapimachinery/toposerver/inst/project.go请求POST /createmany/project把CreateProjectOption序列化为请求体并解析ProjectInstResp响应供 CMDB 内部及测试代码直接调用。七、约束与限制总结数量限制单次data数组最多 200 条BKWriteOpLimit 200超出报超出限制错误ID 格式bk_project_id若传入必须是 32 位无连字符 UUID不传则由系统基于uuid.New()自动生成唯一性约束bk_project_id、bk_project_name、bk_project_code在 MongoDB 中均有唯一索引collections/project.go重复创建同名/同编码项目会触发唯一索引冲突顺序对应响应ids与请求data顺序一致可按位回填事务性批量创建在单事务内完成失败整体回滚鉴权需要项目创建权限启用 IAM 后还会将创建者注册为新项目资源的所有者。八、测试验证参考仓库内置的集成测试 src/test/topo_server/project_test.go 给出了完整可参考的创建用例涵盖显式传入bk_project_id与不传bk_project_id由系统生成两种场景批量创建两个项目后断言IDs[0]、IDs[1]后续的更新改bk_project_status为disabled、查询filter 分页 count、删除按ids批量删除操作闭环。测试代码可直接作为调用该接口的最小可用示例参考验证了请求字段组织方式与响应解析方式。九、相关接口延伸项目生命周期还包含配套接口见 service_initfunc.go 与 apimachinery/toposerver/inst/project.goPUT /api/v3/updatemany/projectbatch_update_project按ids批量更新项目POST /api/v3/findmany/projectlist_project按 filter 查询项目列表DELETE /api/v3/deletemany/projectbatch_delete_project按ids批量删除项目PUT /api/v3/update/project/bk_project_id更新项目bk_project_id为 BCS 项目数据迁移专用的内部接口其他平台不可使用。创建后建议通过list_project或ids回查确认项目已生效再进行后续的更新、关联等操作。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台bk-cmdb批量更新 Kubernetes Workload 接口实战指南蓝鲸配置平台bk cmdb批量更新 Kubernetes Workload 接口实战指南 导读 本文围绕 bk cmdb蓝鲸智云配置平台API 网关提供后端企业应用运维蓝鲸智云配置平台bk-cmdb批量创建容器节点接口 batch_create_kube_node 实战指南蓝鲸智云配置平台bk cmdb批量创建容器节点接口 batch_create_kube_node 实战指南 本文是蓝鲸智云配置平台BlueKing CMD后端企业应用运维蓝鲸配置平台 bk-cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南蓝鲸配置平台 bk cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南 本篇技术指后端企业应用运维上一篇揭秘gdbgui代码高亮技术从语法解析到智能着色的完整实现下一篇Item-NBT-API源码解析NBTCompoundList与集合数据处理原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考