Go Academy · Oppitunti

gRPC-interceptorit ja metadata

Todennus, lokitusmiddleware ja gRPC-metadata

Oppitunti 4/413 vaihetta

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
Aloita maksutta

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

  1. Protocol Buffers ja .proto-tiedostot
  2. Yksisuuntaisen gRPC-palvelun toteuttaminen
  3. Palvelimen ja asiakkaan suoratoisto
  4. gRPC-interceptorit ja metadata
← Takaisin: Go Academy