Senior
Ar gRPC API nėra middleware?
sobes.tech AI
Atsakymas iš AI
gRPC neturi įmontuoto middleware koncepto, kaip HTTP karkasuose, tačiau panaši funkcionalumas gali būti įgyvendintas naudojant interceptors.
Interceptors yra funkcijos, kurios perima RPC kvietimus prieš arba po jų apdorojimo, leidžiančios pridėti logiką, pvz., autentifikaciją, žurnalavimą, metrikas ar klaidų valdymą.
Go gRPC turi du interceptor tipai:
- Unary Interceptor — unary RPC kvietimams (vienas užklausimas, viena atsakymas)
- Stream Interceptor — srautinėms kvietimams
Unary interceptor pavyzdys:
func loggingInterceptor(
ctx context.Context,
req interface{},
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
log.Printf("RPC kvietimas: %s", info.FullMethod)
resp, err := handler(ctx, req)
return resp, err
}
// Registruojant serverį
server := grpc.NewServer(grpc.UnaryInterceptor(loggingInterceptor))
Taip, nors nėra middleware kaip toks, interceptors atlieka panašią funkciją.