Protocol buffers 使用不支持的平台解码Protobuf编码的数据

Protocol buffers 使用不支持的平台解码Protobuf编码的数据,protocol-buffers,Protocol Buffers,我不熟悉Protobufs;我没有太多接触过他们。我们需要数据的API端点之一使用Protobuf编码的数据。如果我使用“受支持”的语言,如JavaScript、Java、Python甚至R来解码数据,这通常不会成为问题 不幸的是,我正试图使用Alteryx自动化这个过程。这不是一个Alteryx特定的问题,我有一些关于Protobufs本身的问题,所以我更了解这种情况。我已经阅读了Java和Python中Protobufs的实现,并对如何使用它们有了基本的了解 推测一下(如果我错了,请纠正我)

我不熟悉Protobufs;我没有太多接触过他们。我们需要数据的API端点之一使用Protobuf编码的数据。如果我使用“受支持”的语言,如JavaScript、Java、Python甚至R来解码数据,这通常不会成为问题

不幸的是,我正试图使用Alteryx自动化这个过程。这不是一个Alteryx特定的问题,我有一些关于Protobufs本身的问题,所以我更了解这种情况。我已经阅读了Java和Python中Protobufs的实现,并对如何使用它们有了基本的了解

推测一下(如果我错了,请纠正我),Protobuf是一种序列化结构化数据的方法,其中.proto模式用于将数据编码/解码为原始二进制。我的困惑在于编译器。Google的Python/Java文档和示例展示了如何使用Protobuf编译器(库)来运行编码和解码过程。阅读谷歌网站,它建议Protobufs是“语言中立和平台中立的”,但如果你需要编译器(和.proto文件!)来解码,我看不出这是怎么可能的。例如,如果有人使用谷歌创建的编译器以外的语言来解码Protobuf编码的数据,他会怎么做?我错过什么了吗

我想我遗漏了一些东西,因为一个公共API会强制执行这个约束似乎很奇怪。

这里的“语言/平台中立”仅仅意味着您可以从任何语言/框架/平台可靠地获取相同的数据。序列化格式是独立定义的,不依赖于任何特定框架的细微差别

这似乎是一个很低的标准,但您会惊讶于有多少序列化格式无法清除它

因为指定了格式,所以任何人都可以为其他平台创建工具。如果你不习惯处理零碎的东西,这有点麻烦,但是:完全可行。protobuf环境并不依赖于谷歌——以下是一些已知的非谷歌工具的列表:


另外,请注意,从技术上讲,您甚至不需要.proto;您只需要一些机制来指定哪些字段映射到哪些字段编号(因为protobuf不包括名称)。该列表中的许多可以从.proto或以其他方式指定的字段/数字映射中工作。proto的优点很简单,它很容易作为模式来表达,而且:它与任何特定的语言都没有联系。您可以为“protoc”编写插件来添加您自己的工具,所以您不需要从头开始编写您自己的解析器。或者,如果您愿意,您可以从头开始编写自己的解析器。

在这种情况下,您不能谈论不受支持的平台:更多的是关于找不到protobuf实现的语言


我的重点是:如果你找不到适合你的语言的protobuf实现,那就找另一种你熟悉的语言(并且在protobuf社区很流行),用它来处理protobuf的序列化/反序列化。然后通过RESTAPI调用它,一个可执行文件。。。不管怎样,谢谢马克的回复。你已经让它更容易理解了。proto只是提供了一种建议的(官方的)方式来命名解码数据中的变量。实际上,我们可以根据自己的喜好命名解码数据中的字段,并使用它。虽然我更好地理解了这种情况,但在使用Alteryx中的.proto文件方面,它仍然没有提供太多帮助。再次谢谢你,马克。我想这是我不得不走的路。Alteryx平台允许定制R/Python/Java/JavaScript代码,因此我将选择一个,然后从那里进行序列化/反序列化。谢谢