gpt4 book ai didi

go - 在 gRPC 拦截器中解码请求

转载 作者:IT王子 更新时间:2023-10-29 01:43:51 25 4
gpt4 key购买 nike

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

例如,这是拦截器。这里调用 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)
}

关于go - 在 gRPC 拦截器中解码请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54664272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com