上文《kratos微服务实战(十五)kratos项目之参数校验protoc-gen-validate规则列表》我们介绍了使用protoc-gen-validate框架的常用规则。本文我们演示下如何在go-kratos中使用proto-gen-valudate进行参数验证。
一、安装依赖
首先这里需要安装依赖,使用install的命令,因为后续需要使用工具来进行编译。所以这里安装依赖的命令是:
go install github.com/envoyproxy/protoc-gen-validate
执行完成之后,在gopath下可以看到一个protoc-gen-validate.exe文件,如下图:
二、为proto文件添加规则
在go-kratos微服务中编写参数校验的规则的话,我们只需要修改对应的.proto文件即可,例如我们前面编写的login接口,我们要求传入的username字符长度固定为5怎么做呢?
1、打开account.proto文件
#引入validate包 import "validate/validate.proto"; #request message套规则 string username = 1 [(validate.rules).string.len = 5]
最后我们的account.proto文件内容如下:
三、编译验证规则
这里需要重新编译account.proto文件,但是不是去编译之前生成的*.pb.go,而是为acount.proto编译一个新的验证的go文件,执行如下的代码:
protoc --proto_path=. --proto_path=./third_party --go_out=paths=source_relative:. --validate_out=paths=source_relative,lang=go:. api/account/v1/*.proto
执行之后就可以看到生成一个xxx.pb.validate.go结尾的go文件,如下图:
备注:
1、官方有介绍使用make命令进行编译这个validate.go文件,但是在windows上使用make比较麻烦,所以我们使用protoc命令来进行编译即可。 2、使用protoc编译的时候需要传入想要编译的.proto文件,需要写对应的路径。 3、上面的命令只需要修改最后的api/account/v1/*.proto即可,其他的命令参数不需要做任何修改。
四、添加验证中间件
最后要想上面的验证起作用,那么需要在http和grpc上注册中间件,修改的文件有:internal/server/http.go文件和internal/server/grpc.go文件,在NewHTTPServer方法和NewGRPCServer方法里面注册中间件,示例图如下:
到这里我们集成验证就完成了,接来下测试运行下
五、运行测试
启动项目,继续请求login接口,把username的字符长度弄大一点,看看返回结果:
可以看到直接弹出了错误的验证信息,是不是很方便?
以上就是在go-kratos中使用protoc-gen-validate框架进行参数验证的案例。最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...