


构建可直接配合官方 SDK 和 CLI 使用的本地云服务模拟器
在为本机运行的云平台模拟器添加服务或操作时使用。先确认真实的通信协议,让请求和响应格式与真实云服务保持一致,同步修改存储方式和配置,并在发布前用官方 SDK 客户端进行测试。
要使用这个AI规则
## 优先让请求和响应格式与真实云服务一致,而不是图省事
按以下顺序确定优先级:
1. 与上游云协议兼容;
2. 符合官方SDK和CLI客户端预期的行为;
3. 复用现有模拟器的模式;
4. 正确性优先于便利性;
5. 采用范围小且可测试的变更。
不要为了方便实现而添加自定义端点结构,也不要简化请求和响应格式。除非所要求的行为必须依赖广泛重构,否则不要进行此类重构。
编辑前,确定目标服务、控制平面或数据平面角色、协议族、可供仿照的现有实现、对配置的影响、对存储的影响、对文档的影响,以及最小但有效的测试计划。
行为不明确时,依次以如下内容为准:上游平台契约、既有模拟器行为、兼容性测试套件的预期。如果任务需要跨服务的架构变更,应说明取舍,而不是盲目重构。
## 让协议处理部分保持精简,把业务逻辑放在服务层
采用分层的服务设计:
- 控制器或处理程序解析协议输入,并生成与协议兼容的响应;
- 服务承载业务逻辑,并抛出共享的云领域异常;
- 模型表示领域数据;
- 注册表、配置、存储工厂、生命周期服务、解析器、构建器和异常映射器提供共享基础设施。
保持控制器精简。引入新模式前,应复用共享工具,并以结构最接近的既有服务为范本。
通过共享异常类型传递领域故障。查询与XML流程应使用标准异常映射器;JSON协议流程应返回规定的结构化错误正文。控制器返回类型必须继续满足预先编译时反射和序列化的约束。
使用构造函数注入,为条件语句加上大括号,并使代码含义不言自明。绝不要留下空的catch块;如果有意容忍某个异常,应记录足够的上下文以便诊断。
## 添加操作前,先确认该服务真实使用的协议
添加操作前,先确定实际使用的线级协议:
- 查询协议使用表单编码的操作和XML响应;
- JSON RPC风格的协议使用目标请求头和结构化JSON;
- REST JSON和REST XML使用资源路径及各自的原生正文格式;
- 数据平面服务可能需要原生TCP代理,而不是HTTP管理API。
使用共享的XML构建器、解析器和命名空间常量。绝不要用正则表达式解析XML。JSON错误应与目标协议的错误结构保持一致。
有些服务会提供不止一条兼容路径。保持各备用处理程序一致,并一同测试。应按身份发现端点实际采用的开放协议处理它们,不要强行套用管理API模型。
应通过官方SDK客户端验证管理API,而不能只依赖手工构造的HTTP请求。某个手工载荷能被接受,并不能证明客户端序列化、请求头、错误、分页或URL生成具备兼容性。
## 始终同时修改存储方式和配置文件
通过共享工厂和已声明的模式支持存储;绝不要在服务内部直接实例化某种存储实现。遵循用于加载、刷写、检查点或预写行为的生命周期钩子。
当接口默认值与部署值不同时,将仓库中的运行时配置文件视为有效的事实来源。
对于与存储有关的行为:
1. 更新规范配置接口;
2. 更新主要运行时配置;
3. 更新测试配置;
4. 通过存储工厂接入该模式;
5. 验证生命周期集成。
对于任何面向用户的配置,还要更新文档并遵循既有的环境变量命名约定。如果基础URL、主机名、区域和账户默认值、端口范围、持久化根目录或容器网络会影响所生成的标识符或端点,也要审查这些内容。
以兼容方式添加新字段,并使共享配置、存储和服务注册保持同步。
## 用官方 SDK 而不是手工请求来测试兼容性
使用单元测试验证隔离的服务行为,使用集成测试验证协议处理、持久化和客户端可见状态。只有当行为有意设计为有状态时,才可以按顺序执行集成测试。
凡是对解析、响应结构、错误、持久化语义、URL生成、服务启用方式或备用协议路径的变更,都必须有自动化测试覆盖。
迭代期间先运行聚焦测试,再运行直接相关的测试套件。如果变更可能影响真实SDK行为,应使用兼容性项目。优先使用基于SDK的断言,而不是原始HTTP请求,并记录任何有意偏离上游行为之处。
当备用协议路径公开同一操作时,应测试其语义是否等价。当状态会持久化时,应在相关存储模式下验证加载和刷写行为。
不要仅凭手工请求就声称实现了兼容性。如果行为发生变化却没有自动化测试覆盖,应说明缺少哪项测试,以及无法添加它的原因。
## 完整做完新服务,不顺手改动发布流程
添加服务时,应创建其控制器、服务和模型;完成注册;添加规范配置和测试配置;通过工厂连接存储;添加测试;并更新文档。
完成前:
- 运行相关测试和协议兼容性检查;
- 确认未引入自定义端点或为求便利而设计的线级格式;
- 验证配置、存储、生命周期和文档更新;
- 检查所生成的URL和资源标识符是否一致;
- 在热点路径中保持日志结构化且安静。
保持拉取请求范围集中;除非明确要求变更,否则应保留现有行为;并将无关重构分离。使用约定式提交类型,并仅标注人类作者。
将发布分支、标签和发布工作流视为关键基础设施。合并到开发分支本身并不能证明发布版本稳定。在实现服务功能时,不要顺带更改发布行为。
