可能楼主主要是相对比较 json+http 吧
其实 protobuf 也可以和 http 配合,我们几乎都这样。
protobuf 主要是对标 json 。
1. 协议字段严格约束,比如一个 list,如果没有应该返回 [],但被调方有可能返回 false 。轻则调用失败,重则客户端 crash 。不要觉得这个很低级,我已经见过很多次了。
2. protobuf 解析的更快,这个就要从 socket 编程说起,那时候都是定义一个 c 结构体,传输数据,其它语言按 c 的实现。但有个问题,没有中间 IDL 文件,别的语言都是对着着.c 文件自己实现,用现在的话说就是会被 C 掐脖子,实现个新功能还得看 c 支不支持。随着 web 2.0 c 也没落了。有些同学可能了解,中间出现过 msgpack 用的人也很多。但 pb 的爹好呀。
看
https://msgpack.org/ 就知道为什么二进制打包的格式更好了。
3. pb 更近一步的是 gRPC 生态繁荣,虽然大公司都是自研的 rpc 框架,但肯定得对标 gRPC,就很自然的选择了 pb
这里的流行更多的是随着微服务的发展,rpc 更加的流行带来的。为了效率就必然有很多工具生成代码。
protoc 只是把发起一个请求的 request/response 的数据结构生成了,方便.set 各种方式赋值,组成请求。但 protobuf-gen-go 更进一步是吧 client 和 server 的代码框架都生成了。类似于脚手架