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 الكامل بالعربي.