0Pricing
Go Academy · Pelajaran

Interceptor dan Metadata gRPC

Autentikasi, middleware logging, dan metadata gRPC

Interceptor dan Metadata gRPC adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Apa itu interceptor?

Interceptor gRPC (middleware) dijalankan sebelum atau sesudah penangan RPC. Interceptor menambahkan perhatian lintas fungsi: pencatatan, validasi token autentikasi, metrik, pemulihan dari kepanikan, dan pelacakan.

Interceptor server unary

Interceptor server unary membungkus penangan dengan logika tambahan:

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))

Interceptor server streaming

Serupa dengan unary, tetapi membungkus penangan streaming:

func StreamLogging(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
    log.Printf("stream: %s", info.FullMethod)
    return handler(srv, ss)
}

Merangkai interceptor

Gunakan grpc.ChainUnaryInterceptor (gRPC Go v1.38+) untuk menerapkan beberapa interceptor secara berurutan:

grpcSrv := grpc.NewServer(
    grpc.ChainUnaryInterceptor(LoggingInterceptor, AuthInterceptor, MetricsInterceptor),
)

Interceptor klien

Interceptor unary di sisi klien membungkus pemanggilan keluar — berguna untuk menyisipkan token autentikasi, percobaan ulang, atau header pelacakan:

conn, _ := grpc.NewClient(addr,
    grpc.WithUnaryInterceptor(ClientAuthInterceptor),
    grpc.WithTransportCredentials(insecure.NewCredentials()),
)

Metadata gRPC

Metadata adalah pasangan kunci-nilai yang dikirim bersama RPC, serupa dengan header HTTP. Gunakan metadata.New dan metadata.NewOutgoingContext pada klien.

md := metadata.New(map[string]string{"authorization": "Bearer " + token})
ctx := metadata.NewOutgoingContext(context.Background(), md)

Membaca metadata pada server

Ekstrak metadata masuk dengan metadata.FromIncomingContext:

md, ok := metadata.FromIncomingContext(ctx)
if !ok { return nil, status.Error(codes.Unauthenticated, "no metadata") }
token := md["authorization"]

Mengirim metadata dari server

Kirim header respons dan trailer dari server dengan grpc.SetHeader dan grpc.SetTrailer:

grpc.SetHeader(ctx, metadata.Pairs("x-request-id", requestID))

go-grpc-middleware

Pustaka github.com/grpc-ecosystem/go-grpc-middleware/v2 menyediakan interceptor siap pakai: pemulihan, pencatatan (zap/logrus), autentikasi, dan lainnya.

Pola interceptor autentikasi

Ekstrak dan validasi token dalam interceptor; lampirkan pengguna ke konteks untuk penangan lanjutan:

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)
}

Interceptor pemulihan dari kepanikan

Bungkus penangan untuk memulihkan diri dari kepanikan dan mengembalikan galat Internal, bukan membuat program mogok:

defer func() {
    if r := recover(); r != nil {
        err = status.Errorf(codes.Internal, "panic: %v", r)
    }
}()

Pemeriksaan Singkat

Bagaimana cara meneruskan token autentikasi antara klien dan server gRPC?

Ringkasan: Interceptor dan Metadata gRPC

Poin-poin penting:

  • Interceptor unary: func(ctx, req, info, handler) (resp, error)
  • grpc.ChainUnaryInterceptor untuk beberapa interceptor
  • Metadata adalah pasangan kunci-nilai; serupa dengan header HTTP
  • Interceptor autentikasi: ekstrak metadata → validasi → tambahkan pengguna ke konteks

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Interceptor dan Metadata gRPC” gratis?

Ya — teks lengkap “Interceptor dan Metadata gRPC” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Interceptor dan Metadata gRPC”?

Autentikasi, middleware logging, dan metadata gRPC Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Interceptor dan Metadata gRPC” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Protocol Buffers dan File .proto
  2. Mengimplementasikan Layanan gRPC Unary
  3. Streaming Server dan Client
  4. Interceptor dan Metadata gRPC
← Kembali ke Go Academy