gpt4 book ai didi

节俭 IDL : service response as list

转载 作者:行者123 更新时间:2023-12-04 14:25:14 26 4
gpt4 key购买 nike

在thrift IDL中,服务响应也可以是list或map吗?

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

另外,我可以验证的来源是什么?还请注明出处。

最佳答案

当然可以:

service FooBar {
list<double> Foobarizer()
}

是完全合法的。

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

这是一个例子:

假设您想添加另一个标志,以提供一些有值(value)的附加信息。我们如何将其添加到响应中?只有一个列表,你迷路了,因为把它改成类似的东西

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()
}

关于节俭 IDL : service response as list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47071491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com