我是Protobufs的新手;我没有接触太多。我们需要数据的API端点之一使用Protobuf编码的数据。如果我使用JavaScript,Java,Python甚至R等“受支持”的语言来解码数据,通常就不会有问题了。
不幸的是,我正在尝试使用Alteryx自动执行该过程。我不是关于Alteryx的特定问题,而是对Protobufs本身有一些问题,因此我可以更好地理解这种情况。我已经阅读了Java和Python中Protobufs的实现,并对如何使用它们有了基本的了解。
为了推测(如果我错了,请纠正我),Protobuf是一种序列化结构化数据的方法,其中使用.proto模式将数据编码/解码为原始二进制。我的困惑在于编译器。 Google文档和适用于Python / Java的示例说明了如何需要Protobuf编译器(库)来运行编码和解码过程。阅读Google网站时,建议Protobuf是“语言无关的和平台无关的”,但是如果您需要编译器(和.proto文件!)来进行解码,我看不出这是怎么可能的。例如,使用Google创建了编译器的语言之外的语言的人怎么会解码Protobuf编码的数据?我想念什么吗?
我认为我遗漏了一些东西,因为公共API会强制执行此约束似乎很奇怪。
答案 0 :(得分:2)
此处“语言/平台无关”仅表示您可以从任何语言/框架/平台可靠地获取相同的数据。序列化格式是独立定义的,并且不依赖于任何特定框架的细微差别。
这似乎是一个较低的标准,但是您会惊讶于有多少序列化格式无法清除它。
由于指定了格式,因此任何人都可以为其他平台创建工具。如果您不习惯于处理比特币,那就有点不巧了,但是:完全可行。 Protobuf格局不依赖于Google-以下是一些已知的非Google工具的清单:https://github.com/protocolbuffers/protobuf/blob/master/docs/third_party.md
此外,请注意,从技术上讲,您甚至不需要.proto。您只需要一些机制来指定哪些字段映射到哪些字段编号(因为protobuf不包含名称)。该列表中的相当一部分可以通过.proto或以其他方式指定的字段/数字映射 起作用。 .proto的优点很简单,即容易可以作为模式进行传递-而且:与特定语言无关。您可以为“ protoc”编写插件来添加自己的工具,因此无需从头开始编写自己的解析器。或者,您也可以根据需要从头开始编写自己的解析器。
答案 1 :(得分:0)
在这种情况下,您不能说不支持的平台:更多地是关于找不到protobuf实现的语言。
我的2美分是:如果找不到您所用语言的protobuf实现,请找到您熟悉的另一种语言(在protobuf社区中很流行)并使用它来处理protobuf的序列化/反序列化。然后通过REST API,可执行文件等等调用它