利用注解实现 Grpc 数据验证 #4821
huangdijia
started this conversation in
Show and tell
Replies: 2 comments 5 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hyperf 对提供了好用的表单验证组件,使得表单验证更简单,不再是各种
if-else
。最近项目组使用到了 Grpc Server,从源码和实例代码看,Grpc Server 是继承了 Http Server。
于是我开始思考,Grpc 的请求是不是也可以跟 HTTP 请求一样。后来发现注入的 HiUser 不是一个标准的
Request
,而是Google/Protobuf/Message
。前面提到,Grpc Server 是继承了 Http Server,于是我把思路转向了中间件。经过测试,思路没毛病,但是遇到一个问题,怎么把标准的 Request 转为 Validator 能识别的 data (array 类型)?
经过源码分析,让我看到了一点希望(Hyperf/Grpc/Parser),1 分钟之后又让我彻底放弃了。原因是我在中间件这个环节无法知道 Message 的类名,无法通过
Hyperf/Grpc/Parser::deserializeMessage()
反向序列化出我需要的 message。最后把希望寄托到了“万能的 AOP”,对控制器的方法做拦截,结合注解实现:
或者复用已有的 fromRequest
下面分享一下我的实现代码:
为什么不直接用 Hyperf 表单验证组件的异常?因为在 ExceptionHandler 里对它做了特殊处理,会导致 Grpc 响应无法解析。
就分享到这里了。
Beta Was this translation helpful? Give feedback.
All reactions