gRPC-interceptorit ja metadata
Todennus, lokitusmiddleware ja gRPC-metadata
gRPC-interceptorit ja metadata on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Go Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Go Academy-kurssilla on yhteensä 4 oppituntia.
Mitä interceptorit ovat?
gRPC-interceptorit eli middleware-komponentit suoritetaan ennen RPC-käsittelijöitä tai niiden jälkeen. Niillä lisätään poikittaisia toiminnallisuuksia, kuten lokitus, todennustunnuksen tarkistus, metriikat, paniikista palautuminen ja jäljitys.
Unary-palvelininteceptori
Unary-palvelininterceptori ympäröi käsittelijän lisälogiikalla:
func LoggingInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
log.Printf("RPC: %s", info.FullMethod)
resp, err := handler(ctx, req)
log.Printf("done: %v", err)
return resp, err
}
grpcSrv := grpc.NewServer(grpc.UnaryInterceptor(LoggingInterceptor))Suoratoistopalvelimen interceptori
Se toimii samalla tavalla kuin unary-interceptori, mutta ympäröi suoratoistokäsittelijän:
func StreamLogging(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
log.Printf("stream: %s", info.FullMethod)
return handler(srv, ss)
}Interceptorien ketjuttaminen
Käyttäkää grpc.ChainUnaryInterceptor-funktiota (Go gRPC v1.38+) useiden interceptorien soveltamiseen järjestyksessä:
grpcSrv := grpc.NewServer(
grpc.ChainUnaryInterceptor(LoggingInterceptor, AuthInterceptor, MetricsInterceptor),
)Asiakasinterceptorit
Asiakaspuolen unary-interceptorit ympäröivät lähteviä kutsuja. Niistä on hyötyä esimerkiksi todennustunnusten, uudelleenyritysten tai jäljitysotsakkeiden lisäämisessä:
conn, _ := grpc.NewClient(addr,
grpc.WithUnaryInterceptor(ClientAuthInterceptor),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)gRPC-metatiedot
Metatiedot ovat RPC-kutsun mukana lähetettäviä avain-arvo-pareja, jotka vastaavat HTTP-otsakkeita. Käyttäkää asiakkaalla metadata.New- ja metadata.NewOutgoingContext-funktioita.
md := metadata.New(map[string]string{"authorization": "Bearer " + token})
ctx := metadata.NewOutgoingContext(context.Background(), md)Metatietojen lukeminen palvelimella
Poimikaa saapuvat metatiedot metadata.FromIncomingContext-funktion avulla:
md, ok := metadata.FromIncomingContext(ctx)
if !ok { return nil, status.Error(codes.Unauthenticated, "no metadata") }
token := md["authorization"]Metatietojen lähettäminen palvelimelta
Lähettäkää vastausotsakkeet ja trailerit palvelimelta grpc.SetHeader- ja grpc.SetTrailer-funktioilla:
grpc.SetHeader(ctx, metadata.Pairs("x-request-id", requestID))go-grpc-middleware
github.com/grpc-ecosystem/go-grpc-middleware/v2-kirjasto tarjoaa valmiita interceptoreita esimerkiksi palautumiseen, lokitukseen (zap/logrus) ja todentamiseen.
Todennusinterceptorin malli
Poimikaa ja tarkistakaa tunnus interceptorissa ja liittäkää käyttäjä kontekstiin myöhempiä käsittelijöitä varten:
func AuthInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
md, _ := metadata.FromIncomingContext(ctx)
if !validateToken(md["authorization"]) {
return nil, status.Error(codes.Unauthenticated, "invalid token")
}
return handler(ctx, req)
}Paniikista palautumisen interceptori
Ympäröikää käsittelijät, jotta voitte palautua paniikeista ja palauttaa Internal-virheen sovelluksen kaatumisen sijaan:
defer func() {
if r := recover(); r != nil {
err = status.Errorf(codes.Internal, "panic: %v", r)
}
}()Pikatarkistus
Miten todennustunnukset välitetään gRPC-asiakkaan ja -palvelimen välillä?
Kertaus: gRPC-interceptorit ja metatiedot
Tärkeimmät kohdat:
- Unary-interceptori: func(ctx, req, info, handler) (resp, error)
- grpc.ChainUnaryInterceptor useille interceptoreille
- Metatiedot ovat avain-arvo-pareja ja vastaavat HTTP-otsakkeita
- Todennusinterceptori: poimi metatiedot → tarkista → lisää käyttäjä kontekstiin
Opi Go tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”gRPC-interceptorit ja metadata” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “gRPC-interceptorit ja metadata”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Go Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”gRPC-interceptorit ja metadata”?
Todennus, lokitusmiddleware ja gRPC-metadata Harjoittelet Go Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Go Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Go Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”gRPC-interceptorit ja metadata”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Go Academy-oppitunnilla?
Kyllä. Jokainen Go Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Protocol Buffers ja .proto-tiedostot
- Yksisuuntaisen gRPC-palvelun toteuttaminen
- Palvelimen ja asiakkaan suoratoisto
- gRPC-interceptorit ja metadata