Thrift IDL:服务响应列表

时间:2017-11-02 09:15:57

标签: thrift

在thrift IDL中,服务响应可以是列表还是映射?

因为,通常我看到它是一些结构或一些原始类型,如string,double等。

另外,我可以验证的来源是什么?还请提及来源。

1 个答案:

答案 0 :(得分:2)

当然可以:

service FooBar {
    list<double>  Foobarizer()
}

完全合法。

那么为什么人们会使用结构呢?好吧,它使API可扩展。这与所谓的"soft versioning"有关。

这是一个例子:

考虑您要添加另一个标志,以提供一些有价值的附加信息。我们如何将其添加到响应中?只有一个列表,你就会迷失方向,因为它会变成像

这样的东西
struct FoobarizerReturn {
  1: list<double>  data
  2: bool theValuableInfo     // added in V2
}

service FooBar {
    //list<double>  Foobarizer()
    FoobarizerReturn  Foobarizer()
}

基本上会破坏旧客户端的API。 为了保持兼容性,您必须改变您的IDL,如下所示:

service FooBar {
    /** V1 deprecated */
    list<double>  Foobarizer()  
    /** V2 use this now */
    FoobarizerReturn  FoobarizerV2()
}

至少有三个缺点:

  • 它需要服务器端的其他代码
  • 它会导致客户端的额外工作
  • 只是丑陋(这是一个技术术语)

因此,最前向兼容的解决方案是从一开始就使用结构,稍后可以根据需要轻松扩展,而不会破坏兼容性。

struct FoobarizerReturn {
  1: list<double>  data
   // more data to come later
}

service FooBar {
    FoobarizerReturn  Foobarizer()
}