Golang Go语言中造了一个 protoc-gen-fieldmask 插件
Golang Go语言中造了一个 protoc-gen-fieldmask 插件
动手做一个 protoc-gen-fieldmask 插件来解决,gRPC 在服务侧的增量更新和屏蔽字段的场景问题;同时总结下使用 PG* 开发 protoc 插件的一些经验。
https://yeqown.xyz/2022/01/25/protoc-gen-fieldmask%E6%8F%92%E4%BB%B6/
更多关于Golang Go语言中造了一个 protoc-gen-fieldmask 插件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中造了一个 protoc-gen-fieldmask 插件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
功能上是有很多应用场景的,但官方这个[]string 里面传字符串的定义其实挺臭的,兼容性的角度,性能的角度都不行
问一个问题,我调用的其他后台提供的 RPC 接口,我和后台使用同一份 proto 协议进行交互,但是后台返回的结果里有一个多余的字段,我这边没有使用这个字段,可以你的这个插件屏蔽该字段吗?如果可以的话,应该怎么屏蔽呢?
可以啊,就是客户端使用 FieldMask 而已,把屏蔽的处理过程放到了客户端而已(客户端获取到 response 之后,调用一下 XXX_FieldMask.Mask(resp) 就会屏蔽不需要的字段,客户端后续的处理中再获取这个字段时就是空值了)只是这样做几乎没有意义~
为啥没意义呢?
从我的角度出发,mask response 字段是为了减少客户端的使用成本,同时节省带宽和减少不必要的计算(提升服务端性能)。但是,如果再客户端自己做的话,那么这两个目的都没有达到 ~ 所以我认为没有意义
在Go语言中,protoc-gen-fieldmask
是一个非常有用的插件,特别是在处理基于Protocol Buffers(简称Protobuf)的RPC(远程过程调用)服务时,它极大地简化了字段屏蔽(Field Masking)的功能实现。字段屏蔽是一种优化数据传输和API设计的有效方法,允许客户端指定它们感兴趣的数据字段,从而减少不必要的数据传输。
protoc-gen-fieldmask
插件的工作原理是,在编译Protobuf定义文件(.proto文件)时生成额外的代码,这些代码能够理解和处理字段屏蔽请求。这通常涉及到在请求和响应消息中添加额外的字段屏蔽信息,以及修改服务端的逻辑以根据这些字段屏蔽信息来序列化或反序列化数据。
使用这个插件的主要好处包括:
- 减少带宽使用:只传输客户端请求的数据字段,降低了网络开销。
- 提高安全性:避免传输敏感信息,增强了数据隐私保护。
- API设计的灵活性:允许API以更细粒度的方式控制数据的暴露。
要在项目中集成protoc-gen-fieldmask
,你需要先安装这个插件,然后在编译.proto文件时指定它。这通常涉及到在protoc
命令行工具中添加相应的--plugin
和--<plugin_output_option>
参数。
总之,protoc-gen-fieldmask
是一个强大的工具,可以帮助你更有效地管理和优化基于Protobuf的RPC服务中的数据传输。如果你正在开发这样的服务,并且希望提高数据传输的效率和安全性,那么集成这个插件无疑是一个明智的选择。