# Bundle 生命周期插件开发

以独立 Adapter Hosted Service 分担公共协议，Bundle 和 Module 提供调用方法，业务后端保留业务与数据库。

生命周期插件用于开通外部租户、同步业务配置、停止外部实例或解除安装绑定。
所有插件统一在 Bundle 顶层绑定，以整个安装实例为操作边界；Module 通过逐资源授权提供属性，不单独拥有插件生命周期。
插件后端的业务程序独立部署，程序和访问凭据不进入 Bundle。公共协议可以与业务实现分层，
不要求每个 Hosted Service 重复编写完整插件协议。

## 推荐架构与当前接入方式

推荐采用[独立 Adapter Hosted Service + Bundle/Module](/development/lifecycle-plugin-development/integration-runtime/)：
平台调用 Adapter 的生命周期 Endpoint，由 Adapter 完成握手、轮换、认证、协议校验及业务调用。
业务 Hosted Service 负责业务实例、授权、事务与幂等，通过自己的 Database Capability 使用数据库。
Adapter 使用独立逻辑数据库保存协议凭据与短期解析授权。Application Runtime 安装调用 Bundle 后提供标准 Module 方法。

Adapter 后端先独立部署，再安装和配置 Adapter Bundle。Bundle 安装不创建 Adapter 的后端项目、
Environment、进程或数据库。业务 Bundle 的生命周期回调用于管理业务租户、配置及绑定，
与 Adapter 和业务后端自身的部署生命周期分别管理。

源码实现、版本发布、环境部署和真实业务联调分别验收；本章不把未验证的部署宣称为一键模板。
也可以[直接实现插件协议](/development/lifecycle-plugin-development/develop-plugin-service/)，
相关 SDK、握手与引用文档同时是 Adapter 的底层协议依据。

新插件使用携带安装环境的引用协议：Bundle 生命周期 `6.0.0`、引用访问解析 `4.1.0`。
插件登记中的 `bundleExecution` 和 Bundle 绑定均须显式声明支持的协议。

## 当前直接接入：从开发到安装验证

1. 实现并部署插件 HTTPS Endpoint，验证生命周期 `6.0.0` 请求。
2. 注册稳定 `pluginId` 与 Bundle 执行声明，配置双向调用所需的独立凭据。
3. 在 Bundle 顶层声明插件绑定、非敏感配置和资源属性授权。
4. 创建 Bundle 版本，在目标 Runtime 安装；由 Runtime 提供安装身份和操作身份。
5. 插件协调其拥有的外部业务状态，返回受授权的业务输出。
6. 在相关生命周期中按引用协议 `4.1.0` 获取并持久化地址与密钥；业务调用及重试使用已生效的本地配置。

## 责任边界

插件目录管理服务身份和执行地址；Bundle 管理资源组合与版本；Runtime 管理安装记录、活动版本、
操作、阶段执行和失败恢复。插件保存自己的业务实例及其安装归属，不能自己推进 Bundle 安装状态。
平台业务组件保存它们拥有的业务配置；同步配置不等于在这些组件中再安装一次插件。

普通安装、升级、卸载由平台安装器完成。只有需要协调外部业务状态时才引入生命周期插件。

## 开发路线

1. [推荐架构：独立 Hosted Service 插件适配器](/development/lifecycle-plugin-development/integration-runtime/)
2. [安装环境与插件请求](/development/lifecycle-plugin-development/installation-environment/)
3. [直接实现插件协议](/development/lifecycle-plugin-development/develop-plugin-service/)
4. [插件注册与管理](/development/lifecycle-plugin-development/registration-management/)
5. [首次握手与凭据轮换](/development/lifecycle-plugin-development/credential-enrollment/)
6. [Bundle 注册与绑定](/development/bundle-development/advanced/lifecycle-plugins/)
7. [验证与发布](/development/lifecycle-plugin-development/verification-and-release/)

底层合同见[Bundle 生命周期与引用协议](/development/lifecycle-plugin-development/reference-protocol/)和
[失败与重试](/development/lifecycle-plugin-development/failure-and-retry/)。
