登录
首页 >  Golang >  Go问答

gRPC 拦截器中的解组请求

来源:stackoverflow

时间:2024-04-23 08:33:34 389浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《gRPC 拦截器中的解组请求》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

为了执行授权,需要读取请求中的一些属性,以便可以为授权服务器进行输入

例如,这是拦截器。这里调用prepareauthzinput来准备输入

func authinterceptor(ctx context.context, req interface{}, info *grpc.unaryserverinfo, handler grpc.unaryhandler) (interface{}, error) {
     input := prepareauthzinput(info.fullmethod, req)
}

在此函数中,有一个很大的 if-else 部分,它检查请求的实际类型,对其进行类型转换,然后执行输入准备。

func prepareAuthZInput(method string, req interface{}) {
   var input Input
   if methodName = "/Data/Call" {
       callRequest, ok := req.(CallRequest)
       if ok {
          // prepare input from callRequest
       }
   } else if methodName = "/Data/Receive" {
       receiveRequest, ok := req.(ReceiveRequest)
       if ok {
          // prepare input from receiveRequest
       }

   }
   return input
}

如何改进此代码?


解决方案


在执行此类操作时,通常会将身份验证数据添加到 metadata 而不是请求消息。这样服务器就不需要检查所有可能的请求负载类型。

如果您必须使用请求有效负载,那么使用类型开关会更惯用:

switch r := req.(type) {
  case CallRequest: // r is a CallRequest...
  case ReceiveRequest: // r is a ReceiveRequest...
  default:
    return status.Errorf(codes.Unimplemented, "unknown request type: %T", req)
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《gRPC 拦截器中的解组请求》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>