【问题标题】:Thrift converting optional to default or requiredThrift 将可选转换为默认或必需
【发布时间】:2018-11-22 05:34:56
【问题描述】:

我有一个节俭的结构

struct Message {
    1: optional int userID;
    ...
} 

将其更改为默认要求是否安全?

struct Message {
    1: int userID;
    ...
} 

如果我知道它总是设置? “必填”呢?

【问题讨论】:

  • 为什么?我问的是相反的:从可选到默认。
  • 你看答案了吗?没有。
  • @JensG 你确定吗?我有一个可选字段,我只是删除了可选字段(使其成为默认值),你认为它不安全吗?你能举一个它会坏的例子吗?

标签: c++ thrift


【解决方案1】:

正如this answer 中所述,Thrift 中有三个(所谓的)必要性:

  • required: 读时必须存在,写时必须设置
  • optional: 可以设置也可以不设置,完全可选
  • “default”:读取时可能不存在,总是写入(除非是null指针)

回答提出的问题:

  1. optional 更改为默认值是安全的(即删除optional 关键字)。

  2. optional 更改为required 可能会破坏兼容性。除非您确保所有客户端/服务器都相应更新,否则旧端可能不会为此类字段提供值。在这种情况下,另一端将拒绝传入的请求或响应,因为接收到的数据中缺少 required 字段。

有关该主题的进一步阅读,您可能需要咨询 Diwaker Gupta 强烈推荐的“Missing Guide”。

【讨论】:

猜你喜欢
  • 2022-08-20
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2011-11-24
相关资源
最近更新 更多