ZBLOG

grpc-gateway 为所有代理的请求附加一个header 参数

在使用 gRPC-gateway 时,可以为所有代理的请求附加一个 header 参数。具体步骤如下:

  1. 在 gRPC service 中定义一个 context.Context 参数,用于接收元数据。

  2. 在转发器中创建一个新的上下文,并将需要添加的 header 参数作为元数据传递给服务端。

例如,在以下的 proto 文件中定义了一个名为 Authorization 的 HTTP 请求头:

syntax = "proto3";

package example;

import "google/api/annotations.proto";
import "google/protobuf/empty.proto";

service MyService {
    rpc MyMethod (google.protobuf.Empty) returns (google.protobuf.Empty) {
        option (google.api.http) = {
            post: "/my/method"
            body: "*"
        };
    }
}

然后,在实现服务端的方法时,可以添加一个 context.Context 参数来接收该请求头:

func (s *myServiceServer) MyMethod(ctx context.Context, req *empty.Empty) (*empty.Empty, error) {
    authorization := metadata.Get(ctx, "authorization")
    // 处理业务逻辑...
}

最后,在转发器中创建一个新的上下文,并将需要添加的 header 参数作为元数据传递给服务端:

mux := runtime.NewServeMux()

metadata := metadata.Pairs("authorization", "Bearer "+token)
ctx := metadata.NewOutgoingContext(context.Background(), metadata)
resp, err := client.MyMethod(ctx, req)

这样,每个通过 gRPC-gateway 转发到服务端的请求都会带有该 header 参数。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5922

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?