当前位置: 首页 > news >正文

AIP-149 未设定域的值

编号149
原文链接https://google.aip.dev/149
状态批准
创建日期2021-02-12
更新日期2021-02-12

在许多消息中,很多域是可选的:用户不需要设定这些域;或者对于输出域,服务可能没有设定这些域。

在大多数情况下,将域设定成默认值(例如 0 )与完全不设定值之间,没有实际区别。但是有时这种区别是有意义的。

指南

使用protocol buffer定义的服务,对于基础类型,当且仅当需要区分将域设置为默认值( 0 、 false 或空字符串)和完全不设定值这两种情况时, 应当 使用 optional 关键字:

// A representation of a book in a library. message Book { option (google.api.resource) = { type: “library.googleapis.com/Book” pattern: “publishers/{publisher}/books/{book}” };

// The name of the book. string name = 1 [(google.api.field_behavior) = IDENTIFIER];

/ The rating for the book, from 0 to 5. / 0 is distinct from no rating. optional int32 rating = 2; }

重要 大多数情况下,服务 不应 需要区分默认值和未设定值;如果备选设计方案不需要进行区分,建议考虑这一方案。实际上,这意味着 optional 应当 仅用于整数和浮点数。

重要 检查域是否存在,与AIP-203中定义的API域行为文档  同。例如,一个使用 optional 标签检查存在性的域, 可以 同时被注解为 google.api.field_behavior = REQUIRED ,如果这个域必须被设定。如果只希望记录服务器感知的域行为,请阅读AIP-203。

向后兼容性

添加或删除现有域的 optional 限定符的变更是无法向后兼容的。因为(在某些编程语言中)编译后的API源代码会发生变化。例如在Golang中,添加 optional 后,基础类型域的数据类型变成了指向原来数据类型的指针。原来数据类型为 string 的变成了 *string 。因此这类变更要求客户端和服务器同步改变对变更域的用法,有风险由容易出错。更多信息请参考Protobuf文档。

理由

域行为和 optional

域行为注解和 optional 标签不是排斥的,它们解决不同的问题。前者 google.api.field_behavior 侧重于传达服务器对API域的感知,例如域是必需的吗?是不可变的吗?……后者protocol buffer版3的 optional 标签是传输格式和代码生成选项,仅限于域的存在性检查。虽然如果一个域被注解为 google.api.field_behavior = REQUIRED ,又被标记为 optional 可能会让人困惑,但在实践中二者是不相关的,可以合理的同时使用。

修订记录

  • 2024-06-05 添加向后兼容性考虑。
  • 2023-06-20 和域行为文档进行区分。

相关文章:

  • 记录一次SpringMVC的406错误
  • Ajax相关
  • ASP.NET Core 8.0学习笔记(二十七)——数据迁移:Migrations深入与其他迁移命令
  • 第三章 组件(8)- 控制 <head> 内容
  • PLC中位、字、双字的关系
  • jdk21虚拟线程
  • 每天五分钟深度学习pytorch:使用Inception模块搭建GoogLeNet模型
  • 【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元
  • 第47天:Web开发-JavaEE应用JNDI注入RMI服务LDAP服务DNS服务高版本限制绕过
  • Content-Type类型总结(安全)
  • Python的算数运算、逻辑运算和分支语句
  • 实时性保障方案
  • 基于SpringBoot的民宿管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • C语言多人聊天室 ---chat(客户端聊天)
  • 蓝桥杯学习笔记03-滑动窗口不定长(最长/最大)
  • Python代码片段-断点任务
  • Linux常见问题
  • 算法日记27:完全背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
  • Unity Android SDK 升级、安装 build-tools、platform-tools
  • 【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制
  • 我国将开展市场准入壁垒清理整治行动
  • 专访丨青年作家杜梨:以动物的视角去观察这个世界
  • 国家发改委答澎湃:力争6月底前下达2025年两重建设和中央预算内投资全部项目清单
  • “中国游”带火“中国购”,“即买即退”让外国游客购物更丝滑
  • 伊朗港口爆炸已致40人死亡
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园