api - RESTful 端点返回 Protobuf 字符串是否常见?
问题描述
您没有 gRPC 服务器(例如,由于平台限制),而是有一个data.SerializeToString()
作为有效负载返回的 REST 端点。当然,该端点的任何客户端都会为每个响应提供适当的 proto 文件,因此他们可以ParseFromString(data)
并且正在路上。这样做的原因包括 Protobufs 的好处。
解决方案
提高对问题的理解:将 PB 用于 gRPC 传输以外的其他目的是否很常见?
是的,这是完全常见和合理的。PBs 实际上只不过是一种数据序列化格式。gRPC 只是将其用作消息交换格式(自然选择,因为两者都是 Google 创作的)。让答案是谷歌本身的描述:
协议缓冲区是 Google 用于序列化结构化数据的语言中立、平台中立、可扩展机制。
Google 的基本教程是将其保存到磁盘。对任何其他二进制 blob(jpeg、mp3、...)执行任何操作
但!如果序列化速度对你来说真的很重要,不要假设任何事情。今天的 JSON 库可能会出人意料地表现出色 - 取决于您的特定平台和主要消息特征。进行自己的性能测试。如果确认 JSON 的劣势,那么还有比 PB 序列化速度更快的库。举几个例子:谷歌不太流行的 PB 兄弟FlatBuffers和一种叫做Simple Binary Encoding的东西,它是为高频交易开发的……不言自明。
推荐阅读
- asp.net - .less 文件不渲染
- c - 使用数组的平均分数 - 由用户在特定时间输入
- c# - 使用 LINQ 进行聚合
- sql - #SQL优化订单模型
- javascript - 在 JavaScript 中使用字符串正则表达式的第一个字母
- ios - iOS 13 通过 AWS SDK 在后台 iOS 中上传多个文件
- html - 如何读取带有印地语字符的 CSV 文件并在 html 上显示?
- python-3.x - 在python中读取具有32位精度整数的txt文件
- python - [Dockerfile 中的 Python],如何找出“Requirements.txt”文件中包的正确顺序是什么?
- angular - 动态路线上的 Angular 8 SEO 图像和内容