تخطَّ إلى المحتوى

gRPC

gRPC — تواصل عالي الأداء بين الخدمات gRPC

إطار RPC مبني على HTTP/2 وProtocol Buffers، بديل أسرع وأخف من REST/JSON للتواصل الداخلي بين الخدمات.

بدل تبادل نصوص JSON عبر HTTP/1.1، يعرّف gRPC عقد الخدمة في ملف `.proto` واحد، ويولّد كود العميل والخادم تلقائياً بأي لغة مدعومة. الرسائل تُرمَّز بصيغة ثنائية مضغوطة (Protocol Buffers) بدل نص، وتُنقل عبر اتصال HTTP/2 واحد مُعاد استخدامه لعدة طلبات متزامنة.

يدعم أربعة أنماط استدعاء: Unary (طلب/استجابة عادي)، Server Streaming، Client Streaming، وBidirectional Streaming. لا يمكن استدعاؤه مباشرة من متصفح لأن المتصفحات لا تتيح التحكم بإطارات HTTP/2 الخام — يلزم طبقة وسيطة تُسمى gRPC-Web لهذه الحالة.

الصياغة

service OrderService {
  rpc GetOrder (GetOrderRequest) returns (Order);
}

📄 مثال

// order.proto
service OrderService {
  rpc GetOrder (GetOrderRequest) returns (Order);
  rpc WatchStatus (GetOrderRequest) returns (stream StatusUpdate);
}

message GetOrderRequest { string order_id = 1; }
message Order { string order_id = 1; string status = 2; }

أهم النقاط

العنصرالوظيفة
Protocol Buffersصيغة تسلسل ثنائية مضغوطة تحل محل JSON
HTTP/2اتصال واحد مُعاد استخدامه، يدعم تعدد الطلبات المتزامنة والـ Streaming
توليد الكودprotoc يولّد Client وServer من نفس ملف .proto بأي لغة مدعومة

💡 نصائح عملية

  • استخدمه للتواصل الداخلي كثيف الحركة بين الخدمات، لا كواجهة عامة للمطورين الخارجيين
  • لا تُعِد استخدام رقم حقل محذوف في .proto — يكسر التوافق مع عملاء قدامى

⚠️ أخطاء شائعة

  • محاولة استدعاء خدمة gRPC مباشرة من كود متصفح دون طبقة gRPC-Web
  • استبدال كل REST API عام بـ gRPC رغم أن العملاء الخارجيين يحتاجون سهولة استكشاف JSON

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار MICROSERVICES الكامل بالعربي.