开发指南平台应用、模块与 Bundle 开发模块开发
方法行为与重试契约
在现有方法描述中声明副作用、幂等和未知结果处理,避免把签名兼容误当作安全重试。
方法的参数和返回类型描述数据形状;调用安全还依赖副作用、身份和失败行为。开发者应在方法源码的
description 中写明以下内容,并随 Module 版本一起发布。调用方回读目标 Runtime 的方法定义时读取该说明;
信息缺失或含糊时,先补齐契约,不据方法名或 HTTP 动词猜测。
声明内容
| 内容 | 需要回答的问题 |
|---|---|
| 副作用与范围 | 是否写数据、发消息或调用外部系统?影响哪些对象?是否允许部分成功? |
| 身份与权限 | 是否要求最终用户上下文?如何限制工作区、对象和外部账号权限? |
| 幂等 | 是否保证重复调用不重复产生业务效果?适用条件是什么? |
| 幂等键 | 若需要,键对应哪个已声明参数、作用域和有效期?相同键不同参数如何处理? |
| 超时与取消 | 客户端超时后服务端是否继续?是否有明确支持的取消能力? |
| 错误与重试 | 哪些错误可重试、等待规则及次数限制是什么?哪些错误需先修正输入或权限? |
| 未知结果 | 用哪个业务标识和查询方法确认最终状态?如何处理已受理但尚未完成? |
当前方法模型没有平台统一的结构化幂等/重试策略字段。description 是开发者与调用方阅读的行为说明,
不触发网关自动执行策略,也不作为平台可验证的幂等证明。不要添加未定义的 JSON 字段。
需要幂等键的方法应把键声明为正常业务参数,并由实现方兑现去重、冲突检查和结果查询语义;
仅在请求中增加一个键不会产生这些保证。
描述示例
下面是业务方法 description 的示意文本,只有实现确实满足这些条件时才能使用:
创建订单,可能写入订单并提交下游。要求当前用户拥有目标组织的下单权限。 orderRequestId 是必填业务参数,在同一组织内唯一;重复提交相同键和参数返回同一订单, 相同键不同参数返回冲突。客户端超时不代表取消;先按 orderRequestId 查询订单状态, 只有确认不存在且仍在方法约定的去重有效期内,才按相同参数重试。
实际方法还应写清去重有效期、状态查询方法、错误码和重试上限,不能照抄示例代替业务实现。
调用方默认规则
- HTTP
200后仍检查 CModel;传输失败或超时可能表示结果未知,不代表没有副作用。 - 行为未声明时,不自动重试可能写入的方法,也不因连接失败改用新业务键重新提交。
- 声明幂等的方法仍需遵守错误分类、次数限制和退避要求;权限错误不能通过循环重试解决。
- 签名兼容只检查数据契约;从只读变为写入、缩短去重窗口、改变事务边界等行为变化,需要显式评估消费者影响并按 SemVer 发布。
调用链和响应检查见模块服务间调用协议。