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)? –
謝謝!不過,我正在尋找一種語言解決方案,而不是外部插件。 –
我沒有一個線索,然後......但從我的小經驗來看,如果有人創建了一個外部插件,那就是它從語言中缺失 –