在 gRPC-gateway 中追加请求头参数可以使用中间件(middleware)实现。中间件是指将请求传递给处理程序之前或之后,执行其他操作的一种机制。
以下是一个示例中间件,用于向所有传入的 HTTP 请求添加 X-Request-ID
头:
func requestIDMiddleware(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 生成 Request ID 并将其添加到请求头
requestID := uuid.New().String()
r.Header.Set("X-Request-ID", requestID)
// 调用下一个处理程序
handler.ServeHTTP(w, r)
})
}
然后,在创建 gRPC-gateway 的服务时,将该中间件应用于转发器:
mux := runtime.NewServeMux()
// 应用 requestIDMiddleware 中间件
handler := requestIDMiddleware(mux)
err = example.RegisterMyServiceHandlerFromEndpoint(
ctx,
mux,
endpoint,
opts,
)
if err != nil {
log.Fatalf("failed to register gRPC gateway: %v", err)
}
// 启动 HTTP 服务器并监听端口
log.Printf("listening on %s", addr)
log.Fatal(http.ListenAndServe(addr, handler))
这样,每个通过 gRPC-gateway 转发到服务端的 HTTP 请求都会带有 X-Request-ID
头。