AIP-4235
·
[tommwq@126.com]
自动填充请求消息中的字段
对于利用请求幂等性的API(如AIP-155所述),API可以选择让客户端库自动填充字段,例如`request_id`,如果客户尚未设置这些字段。
注意: 此功能主要是为请求消息中的`request_id`字段编写的。然而,此功能**必须**适用于任何名称的字段,只要满足以下条件。
指南
API**可以**配置请求消息中的字段以进行自动填充。要自动填充字段,**所有**以下条件**必须**为真:
- 字段**必须**为`string`类型
- 字段**必须**位于请求消息的顶层
- RPC**必须**是单次RPC(即不支持流式RPC)
- 字段**不得**使用`google.api.field_behavior = REQUIRED`进行注释
- 字段**必须**使用`google.api.field_info.format = UUID4`进行注释
- 字段名称**必须**列在目标方法的`google.api.Publishing.method_settings`中的`google.api.MethodSettings.auto_populated_fields`条目中
预期的生成器和客户端库行为
如果给定字段满足上述要求,客户端库生成器**必须**在生成的客户端中启用该字段的自动填充。
字段**必须**在以下任一条件成立时自动填充:
- 字段支持显式存在,并且**未**由用户设置
- 字段不支持显式存在,并且其值为空字符串(即默认值)
如果字段在`auto_populated_fields`中指定,但不满足结构要求,客户端库生成器**不得**启用该字段的自动填充。客户端库生成器**可以**在生成期间发出错误。
客户端库**必须**重用自动填充的值以重试相同的请求。换句话说,自动填充的字段**不得**为每个使用相同请求消息的RPC尝试重新生成。