百积木文档
开发指南平台应用、模块与 Bundle 开发模块开发

方法行为与重试契约

在现有方法描述中声明副作用、幂等和未知结果处理,避免把签名兼容误当作安全重试。

方法的参数和返回类型描述数据形状;调用安全还依赖副作用、身份和失败行为。开发者应在方法源码的 description 中写明以下内容,并随 Module 版本一起发布。调用方回读目标 Runtime 的方法定义时读取该说明; 信息缺失或含糊时,先补齐契约,不据方法名或 HTTP 动词猜测。

声明内容

内容需要回答的问题
副作用与范围是否写数据、发消息或调用外部系统?影响哪些对象?是否允许部分成功?
身份与权限是否要求最终用户上下文?如何限制工作区、对象和外部账号权限?
幂等是否保证重复调用不重复产生业务效果?适用条件是什么?
幂等键若需要,键对应哪个已声明参数、作用域和有效期?相同键不同参数如何处理?
超时与取消客户端超时后服务端是否继续?是否有明确支持的取消能力?
错误与重试哪些错误可重试、等待规则及次数限制是什么?哪些错误需先修正输入或权限?
未知结果用哪个业务标识和查询方法确认最终状态?如何处理已受理但尚未完成?

当前方法模型没有平台统一的结构化幂等/重试策略字段。description 是开发者与调用方阅读的行为说明, 不触发网关自动执行策略,也不作为平台可验证的幂等证明。不要添加未定义的 JSON 字段。 需要幂等键的方法应把键声明为正常业务参数,并由实现方兑现去重、冲突检查和结果查询语义; 仅在请求中增加一个键不会产生这些保证。

描述示例

下面是业务方法 description 的示意文本,只有实现确实满足这些条件时才能使用:

创建订单,可能写入订单并提交下游。要求当前用户拥有目标组织的下单权限。 orderRequestId 是必填业务参数,在同一组织内唯一;重复提交相同键和参数返回同一订单, 相同键不同参数返回冲突。客户端超时不代表取消;先按 orderRequestId 查询订单状态, 只有确认不存在且仍在方法约定的去重有效期内,才按相同参数重试。

实际方法还应写清去重有效期、状态查询方法、错误码和重试上限,不能照抄示例代替业务实现。

调用方默认规则

  • HTTP 200 后仍检查 CModel;传输失败或超时可能表示结果未知,不代表没有副作用。
  • 行为未声明时,不自动重试可能写入的方法,也不因连接失败改用新业务键重新提交。
  • 声明幂等的方法仍需遵守错误分类、次数限制和退避要求;权限错误不能通过循环重试解决。
  • 签名兼容只检查数据契约;从只读变为写入、缩短去重窗口、改变事务边界等行为变化,需要显式评估消费者影响并按 SemVer 发布。

调用链和响应检查见模块服务间调用协议。

本页内容