Protobuf不支持开箱即用的消息验证,但可以使用插件添加它(但这是唯一的方法,但它并不简单)。
您可以尝试查找现有的插件,或创建自己的插件(如果您的语言没有现有的插件)。
如果您决定编写自己的插件,那么第一步是定义为a custom option领域:
package yourcompany;
import "google/protobuf/descriptor.proto";
extend google.protobuf.FieldOptions {
optional string validator = 51234;
}
这个选项允许你指定一个具体的领域正则表达式。然后你申请新的自定义选项:
message Update {
string sensor_id = 1 [(yourcompany.validator) = "SENSOR-???????"];
// ...
}
其次,更具挑战性的步骤是write your own plugin为了验证逻辑添加到生成的代码:
此外,插件是能够插入代码插入到由其他代码生成器生成的文件。有关更多信息,请参阅plugin.proto中有关“插入点”的评论。例如,这可以用来编写一个插件,该插件可以生成针对特定RPC系统量身定制的RPC服务代码。查看每种语言中生成的代码的文档以找出它们提供的插入点。
您的插件必须检查您的自定义选项的值并为字段生成额外的验证码。
这是否有帮助:[go-proto-validators](https://github.com/mwitkow/go-proto-validators)? –
谢谢!不过,我正在寻找一种语言解决方案,而不是外部插件。 –
我没有一个线索,然后......但从我的小经验来看,如果有人创建了一个外部插件,那就是它从语言中缺失 –