gRPC 服务参数校验:在 HTTP 层还是 RPC 层进行?

grpc 服务参数校验:在 http 层还是 rpc 层进行?

gRPC 封装 HTTP 服务中的参数校验

在将 HTTP 服务封装到 gRPC 服务中时,关于参数校验的位置存在一些争论。在 Node.js 中使用 Iris 框架和 go-proto-validators 库,出现了不同的意见。

争论的焦点

  • 靠近数据库的一层进行校验:防止恶意调用影响数据库。
  • HTTP 参数传入时进行校验:确保参数及时被验证,避免浪费资源。

同事的想法:

  • 认为前端的参数校验不可靠,因此需要在 RPC 服务中再次校验。

作者的想法:

  • 使用 go-proto-validators 在客户端拦截器中进行参数校验,认为这是一种更有效率的方式。

正确的方法

实际上,应该在 HTTP 参数传入时进行参数校验。这可以确保在请求到达 gRPC 服务之前,非法参数已被阻止。

但是,使用 Interceptor 进行校验是否合适?

  • 性能隐患:在 Interceptor 中进行校验可能会造成性能损失,因为此时 gRPC 连接可能已经打开。
  • 业务封装如果将来需要在 HTTP 服务中添加业务封装,则在 Interceptor 中进行校验可能会导致维护困难。

建议

  • HTTP 服务中实现参数校验。
  • 根据实际需求,考虑在 Interceptor 中进行额外校验。
  • 权衡 Interceptor 校验的性能影响。

以上就是gRPC 服务参数校验:在 HTTP 层还是 RPC 层进行?的详细内容,更多请关注其它相关文章!