إنشاء تطبيقات خادم العميل باستخدام gRPC

gRPC هو إطار عمل استدعاء إجراء عن بعد (RPC) حديث ومفتوح المصدر وعالي الأداء يمكن تشغيله في أي بيئة. يمكنها ربط الخدمات بكفاءة داخل مراكز البيانات وعبرها من خلال دعم قابل للتوصيل لموازنة التحميل والتتبع والتحقق من الصحة والمصادقة. كما أنها قابلة للتطبيق أيضًا في المرحلة الأخيرة من الحوسبة الموزعة لتوصيل الأجهزة وتطبيقات الجوال والمتصفحات بخدمات الخلفية. يمكنك العثور على مستندات على الموقع الإلكتروني الرسمي لـ gRPC والحصول على الدعم من المنتديات مفتوحة المصدر. يوجهك هذا الدليل إلى حلول لإنشاء تطبيقات Android باستخدام gRPC.

grpc.io هو الموقع الإلكتروني الرسمي لمشروع gRPC. لمزيد من المعلومات عن آلية عمل gRPC، راجِع المقالة ما المقصود بـ gRPC؟ وgRPC Concepts. للتعرّف على كيفية استخدام gRPC في تطبيق Android، راجِع مثال Hello World في gRPC Android Java Quickstart. ويمكنك أيضًا العثور على العديد من أمثلة Android gRPC الأخرى على GitHub.

الميزات

تبسيط عملية الاستدعاء
يرمز نموذج البرمجة إلى استدعاء إجراء عن بُعد (RPC) وهو عبارة عن استدعاءات إجراءية، حيث يتم ابتعاد جانب الشبكات التقنية عن رمز التطبيق، ما يجعله يبدو تقريبًا كما لو كان استدعاء دالة عادية داخل العملية. لن يكون تفاعل خادم العميل مقيدًا بالدلالات الدلالية لطرق موارد HTTP (مثل GET وPUT وPOST وDELETE). مقارنةً بواجهات برمجة تطبيقات REST، تبدو عملية التنفيذ طبيعية أكثر، بدون الحاجة إلى معالجة البيانات الوصفية لبروتوكول HTTP.
نقل فعّال على الشبكة باستخدام HTTP/2
قد يكون نقل البيانات من الأجهزة الجوّالة إلى خادم خلفي عملية تتطلّب الكثير من الموارد. باستخدام بروتوكول HTTP/1.1 القياسي، يمكن أن تؤدي عمليات الاتصال المتكررة من جهاز جوّال إلى خدمة سحابية إلى استهلاك البطارية وزيادة وقت الاستجابة وحظر التطبيقات الأخرى من الاتصال. بشكل تلقائي، يتم تشغيل gRPC أعلى HTTP/2، الذي يقدم البث ثنائي الاتجاه، والتحكم في التدفق، وضغط العنوان، والقدرة على تعدد الطلبات عبر اتصال TCP/IP واحد. والنتيجة هي أنّ gRPC يمكن أن يقلل من استخدام الموارد، ما يؤدي إلى تقليل أوقات الاستجابة بين التطبيقات والخدمات التي يتم تشغيلها على السحابة الإلكترونية، وتقليل استخدام الشبكة، وإطالة عمر البطارية للبرنامج الذي يعمل على الأجهزة الجوّالة.
توفُّر تبادل بيانات البث المُدمَج
تم تصميم gRPC بحيث يتوافق منذ البداية مع HTTP/2 للبث الثنائي الاتجاه الكامل. يتيح البث حجم الطلب والاستجابة بشكل عشوائي، مثل العمليات التي تتطلب تحميل أو تنزيل كمية كبيرة من المعلومات. باستخدام البث، يمكن للعميل والخادم قراءة الرسائل وكتابتها في آنٍ واحد والاشتراك في بعضهما بدون تتبُّع معرِّفات الموارد. ويجعل ذلك عملية تنفيذ تطبيقك أكثر مرونة.
الدمج السلس مع مخزن البروتوكول المؤقت
تستخدم gRPC آليات دفاتر البروتوكول (Protobuf) كطريقة تسلسلية/إزالة تسلسلية من خلال المكوّن الإضافي الخاص بمنشئ الترميز المحسَّن لنظام Android (Protobuf Java Lite). بالمقارنة مع التنسيق المستند إلى النص (مثل JSON)، يوفّر Protobuf إمكانية تبادل بيانات أكثر كفاءة من حيث سرعة التنظيم وحجم الرمز، ما يجعله أكثر ملاءمة للاستخدام في بيئات الأجهزة الجوّالة. كما أن بناء الجملة الموجزة لتعريف الرسالة/الخدمة في Protobuf يجعل من السهل جدًا تحديد نموذج البيانات وبروتوكولات التطبيق لتطبيقك.

نظرة عامة على الاستخدام

من خلال اتّباع البرنامج التعليمي gRPC Basics - Android Java ، يتضمّن استخدام gRPC لتطبيقات Android أربع خطوات:

  • تحديد خدمات استدعاء إجراء عن بُعد (RPC) باستخدام مخازن البروتوكولات المؤقتة وإنشاء واجهات عميل gRPC.
  • أنشئ قناة تعمل كوسيط لاستدعاءات استدعاء إجراء عن بُعد (RPC) بين العميل والخادم.
  • أنشئ عميل Stub كنقطة دخول لبدء استدعاءات RPC من جهة العميل.
  • إجراء استدعاءات استدعاء إجراء عن بُعد (RPC) للخادم البعيد كما تفعل عند إجراء استدعاءات الإجراءات المحلية.

ولأغراض التوضيح، يتم نقل وحدات البايت في نص عادي في المثال المقدَّم. ومع ذلك، يجب على تطبيقك تشفير بيانات الشبكة دائمًا في مرحلة الإنتاج. توفّر خدمة gRPC دعم تشفير بروتوكول أمان طبقة النقل (SSL)/بروتوكول أمان طبقة النقل (TLS)، بالإضافة إلى تبادل رمز OAuth المميز (OAuth2 مع خدمات Google) للمصادقة. لمعرفة مزيد من التفاصيل، يُرجى الاطّلاع على بروتوكول أمان طبقة النقل (TLS) على Android واستخدام OAuth2.

نقل

توفّر gRPC خيارين بين عمليات تنفيذ النقل لعملاء Android وهما: OkHttp وCronet.

اختيار وسيلة نقل (خيار متقدّم)

  • بروتوكول OkHttp
    OkHttp هي حزمة شبكات خفيفة الوزن تم تصميمها للاستخدام على الأجهزة الجوّالة. وهو وسيلة النقل التلقائية للنموذج الافتراضي لكل من gRPC للتشغيل في بيئة Android. لاستخدام OkHttp كنقل gRPC لتطبيقك، أنشئ القناة باستخدام AndroidChannelBuilder، الذي يلتف على OkHttpChannelBuilder، وسيتم تسجيل شاشة الشبكة في نظام التشغيل Android للاستجابة بسرعة للتغييرات في الشبكة. يمكن العثور على مثال للاستخدام في gRPC-Java AndroidChannelBuilder.
  • Cronet (إصدار تجريبي)
    Cronet هي حزمة "الشبكات" من Chromium وإضافتها كمكتبة للأجهزة الجوّالة. وتوفّر هذه الخدمة دعمًا قويًا للشبكات مع بروتوكول QUIC المتطوّر، والذي يمكن أن يكون فعّالاً بشكل خاص في بيئات الشبكة غير الموثوق بها. لمعرفة مزيد من التفاصيل حول Cronet، يمكنك الاطلاع على تنفيذ عمليات الشبكة باستخدام Cronet. لاستخدام Cronet كوسيلة نقل من نوع gRPC لتطبيقك، عليك إنشاء القناة باستخدام CronetChannelBuilder. يتم تقديم مثال على الاستخدام في ملف gRPC-Java Cronet Transport.

بشكل عام، ننصح التطبيقات التي تستهدِف الإصدارات الحديثة من حزمة تطوير البرامج (SDK) باستخدام Cronet، لأنّها توفِّر حِزمة أقوى على الشبكة. والجانب السلبي في استخدام Cronet هو زيادة حجم APK لأن إضافة تبعية Cronet الثنائية تضيف أكثر من 1 ميغابايت إلى حجم التطبيق، في مقابل حوالي 100 كيلوبايت لـ OkHttp. بدءًا من الإصدار 10 من GMSCore، يمكن تحميل نسخة حديثة من Cronet من "خدمات Google Play". قد لا يشكّل حجم حزمة APK مصدر قلق، إلا أنّ الأجهزة التي لم يتم تثبيت أحدث إصدار من GMSCore عليها قد تفضّل استخدام بروتوكول OkHttp.