模块定义开发
定义模块属性、方法、用户域和权限。
模块版本来自项目 Git 快照。运行时可调用方法来自 methods/*.json,不能只修改数据库记录、Manager 页面或已经安装的运行态服务。
模块源码项目不是发布单元,可以先独立创建:
baijimu module project create <workspaceId> --name <projectName>模块定义必须在 Bundle 内创建。<bundle> 可以是 bundleId 或精确名称;CLI 会先解析
并校验唯一 Bundle,再把稳定 bundleId 写入模块定义:
baijimu bundle module create <workspace> <bundle> \
--project-id <projectId> \
--name <moduleName> \
--description <description>不要使用隐藏的旧版顶层 module create 作为新流程入口,也不要创建没有 Bundle 归属的
模块记录。
主要文件
| 文件 | 内容 |
|---|---|
module.json | 名称、描述、属性、用户域、接口、依赖和插件配置 |
methods/*.json | 方法名称、参数、返回值、错误类型和方法实现 |
不同历史项目中的 JSON 字段可能使用数组或 JSON 字符串。修改时保留现有字段形状,除非当前版本迁移明确要求规范化。
属性
属性需要声明类型、必填、默认值、敏感性和管理方。常见分类:
- 连接凭据:
appId、appSecret、token - 路由配置:
serviceBaseUrl - 运行开关:
autoStart、syncEnabled - 运行态回填:外部实例 ID、状态、最后同步时间
敏感属性不能出现在页面文案、日志、Bundle Manifest 或普通返回值中。
方法
每个方法应明确:
- 稳定业务名称
- 参数类型、必填和默认值
- 返回类型和错误模型
- 需要的属性与用户域
- 超时、幂等和重试语义
不要把内部 Controller 名、第三方原始路径或临时实现细节作为公共方法名。
paramDefinitions 是模块方法面对所有调用方的公共 JSON 输入契约。平台应用页面发送的
JSON 顶层字段与参数名称一一对应;模块内部 HTTP 请求的 methodBody 不属于页面协议。
浏览器侧的完整调用方式见
平台应用调用模块方法。
用户身份
模块方法从运行时调用上下文获取当前工作区、访问用户、用户域和来源。不要依赖浏览器把 userId 作为普通业务参数传入。
需要映射第三方账号时,服务端保存百积木用户与外部账号的映射,并在调用前同时校验平台权限和外部系统权限。
与 Bundle 生命周期的边界
模块只声明自身运行契约。需要自动创建外部租户、数据库、许可证或其他安装态资源时,由 Bundle 在高级生命周期配置中绑定插件,并把插件输出映射到模块属性。
不要在新模块定义中把 Bundle 级生命周期降级成模块级 plugins 配置。历史
external-managed 定义只用于兼容已有模块,不能表达多个模块、平台应用、工作流和其他
Bundle 资源共同参与的生命周期。