JSON作为消息类型。JSON和Rest的关键点是它并不是很高性能,也没有大量的优化。
要用很大量的步骤构建客户端,做集成。
Google提出了一种新的方法称为gRPC,背后的意图是你仍然使用标准的协议。
在这个情况下是使用Http2,不是Http。
但是并不是使用Json,你将使用的是一个基于二进制的称为prrotobufs。
因为是基于二进制的,显然更快序列化的。
最终定义prototype,任何人可以生成客户端基于。
在proto文件中service,为service定义方法。也为方法定义message。
一个service定义看起来像这样。
当你为protobufs中在service中定义一个方法时。
message
需要指明message中的位置。这是重要的如果你想要向后兼容性,所以我可以添加新的域到message里并且维护向后兼容性,但是不能够改变索引并且维护向后兼容性。
已经指明了是一个基于rpc的service。
protobuf有自己的类型,因为protobuf被设计为独立于你的相关语言。
所以我在go中定义protobuf,它应该与在Javascript上工作相同,或者是Java,Ruby,Python。
你将最终得到二进制,序列化的格式。
Json被编码为string,protobufs被编码为二进制。编码成二进制的协议。
我们已经定义了service,需要从protobuf中生成一些go代码。
使用一些工具,使用的工具是
protoc命令基于一个proto文件为特定的语言生成代码文件。
它接受proto文件,生成go,java,c#,ruby,objective。
对于gRPC,使用插件。需要安装gRPC插件,它是一个go包。
gRPC由google维护。
gRPC是一个使用protocol buffer作为消息的框架。
我们将把它作为构建过程的一部分当改变了proto文件时。
开始生成Go结构体基于proto buffer定义。代码生成创建了struct。
用protobuf有能力序列化它到json,这对于二进制和基于文本的协议的转换非常有用。