معترضات gRPC والبيانات الوصفية
المصادقة وMiddleware التسجيل والبيانات الوصفية لـ gRPC
معترضات gRPC والبيانات الوصفية درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما هي المعترضات؟
تعمل معترضات gRPC (البرمجيات الوسيطة) قبل معالجات RPC أو بعدها. وتضيف اهتمامات مشتركة بين المكونات، مثل التسجيل والتحقق من رموز المصادقة والمقاييس واسترداد حالات panic والتتبّع.
معترض الخادم الأحادي
يغلّف معترض الخادم الأحادي المعالج بمنطق إضافي:
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))معترض خادم البث
يشبه المعترض الأحادي، لكنه يغلّف معالج البث:
func StreamLogging(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
log.Printf("stream: %s", info.FullMethod)
return handler(srv, ss)
}تسلسل المعترضات
استخدموا grpc.ChainUnaryInterceptor (في Go gRPC v1.38+) لتطبيق عدة معترضات بالترتيب:
grpcSrv := grpc.NewServer(
grpc.ChainUnaryInterceptor(LoggingInterceptor, AuthInterceptor, MetricsInterceptor),
)معترضات العميل
تغلّف المعترضات الأحادية من جانب العميل الاستدعاءات الصادرة — وهي مفيدة لحقن رموز المصادقة أو إعادة المحاولة أو ترويسات التتبّع:
conn, _ := grpc.NewClient(addr,
grpc.WithUnaryInterceptor(ClientAuthInterceptor),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)البيانات الوصفية في gRPC
البيانات الوصفية هي أزواج مفتاح-قيمة تُرسل إلى جانب RPC، وتشبه ترويسات HTTP. استخدموا metadata.New وmetadata.NewOutgoingContext على العميل.
md := metadata.New(map[string]string{"authorization": "Bearer " + token})
ctx := metadata.NewOutgoingContext(context.Background(), md)قراءة البيانات الوصفية على الخادم
استخرجوا البيانات الوصفية الواردة باستخدام metadata.FromIncomingContext:
md, ok := metadata.FromIncomingContext(ctx)
if !ok { return nil, status.Error(codes.Unauthenticated, "no metadata") }
token := md["authorization"]إرسال البيانات الوصفية من الخادم
أرسلوا ترويسات الاستجابة والملحقات من الخادم باستخدام grpc.SetHeader وgrpc.SetTrailer:
grpc.SetHeader(ctx, metadata.Pairs("x-request-id", requestID))go-grpc-middleware
توفر مكتبة github.com/grpc-ecosystem/go-grpc-middleware/v2 معترضات جاهزة: الاسترداد والتسجيل (zap/logrus) والمصادقة وغير ذلك.
نمط معترض المصادقة
استخرجوا رمزًا مميزًا وتحققوا منه في معترض، ثم أرفقوا المستخدم بالسياق للمعالجات التابعة:
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)
}معترض استرداد حالات panic
غلّفوا المعالجات لاسترداد حالات panic وإرجاع خطأ Internal بدلًا من توقف البرنامج:
defer func() {
if r := recover(); r != nil {
err = status.Errorf(codes.Internal, "panic: %v", r)
}
}()اختبار سريع
كيف تمرّرون رموز المصادقة بين عميل gRPC وخادمه؟
مراجعة: معترضات gRPC والبيانات الوصفية
النقاط الأساسية:
- المعترض الأحادي: func(ctx, req, info, handler) (resp, error)
- grpc.ChainUnaryInterceptor لتطبيق عدة معترضات
- البيانات الوصفية هي أزواج مفتاح-قيمة؛ وتشبه ترويسات HTTP
- معترض المصادقة: استخراج البيانات الوصفية ← التحقق منها ← إضافة المستخدم إلى السياق
تعلم Go مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «معترضات gRPC والبيانات الوصفية» مجاني؟
نعم — نص درس «معترضات gRPC والبيانات الوصفية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «معترضات gRPC والبيانات الوصفية»؟
المصادقة وMiddleware التسجيل والبيانات الوصفية لـ gRPC تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «معترضات gRPC والبيانات الوصفية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Protocol Buffers وملفات .proto
- تنفيذ خدمة gRPC أحادية الاتجاه
- البث من الخادم والعميل
- معترضات gRPC والبيانات الوصفية