ما الفرق بين RPC وREST؟
يُعد استدعاء الإجراء عن بُعد (RPC) وإطار نقل الحالة التمثيلية (REST) نمطين من الأنماط البنيوية المستخدمة في تصميم واجهات برمجة التطبيقات. واجهات برمجة التطبيقات هي آليات تُمكّن اثنين من مكونات البرنامج الاتصال ببعضهما باستخدام مجموعة من التعريفات والبروتوكولات. يستخدم مطورو البرامج مكونات تم تطويرها سابقًا أو مكونات تابعة لجهات خارجية لأداء الوظائف، ولذلك لا يضطرون إلى كتابة كل شيء من الصفر. تسمح واجهات RPC API للمطورين باستدعاء الوظائف البعيدة في الخوادم الخارجية كما لو كانت في بيئة محلية لبرامجهم. على سبيل المثال، يُمكنك إضافة وظيفة دردشة إلى تطبيقك عن طريق استدعاء وظائف المراسلة عن بُعد على تطبيق دردشة آخر. في المقابل، تسمح لك واجهات REST API بإجراء عمليات بيانات محددة على خادم بعيد. على سبيل المثال، يُمكن لتطبيقك إدراج بيانات الموظف أو تعديلها على خادم بعيد باستخدام واجهات REST API.
ما أوجه التشابه بين RPC وREST؟
يُعد استدعاء الإجراء عن بُعد (RPC) وREST طريقتين لتصميم واجهات برمجة التطبيقات. تُعد واجهات برمجة التطبيقات أمرًا أساسيًا في تصميم الويب الحديث وغيره من الأنظمة الموزعة. إنها تسمح لتطبيقين منفصلين موزعين أو خدمتين منفصلتين موزعتين بالاتصال بدون معرفة التفاصيل الداخلية لآلية عمل التطبيق الآخر أو الخدمة الأخرى. قد لا يكون لهذين التطبيقين أو الخدمتين علاقةً تُذكر ببعضهما باستثناء التبادل البسيط للبيانات.
تُعد واجهات برمجة التطبيقات أيضًا آليةً شائعةً للواجهة الخلفية للبرنامج (المكون المنطقي) للتواصل مع الواجهة الأمامية للبرنامج (مكون العرض). عندما تصمم صفحات الويب وتطبيقات الويب باستخدام واجهات برمجة التطبيقات بدلاً من التكامل محكم الاقتران، فإنك تضمن إمكانية توسعة نطاقها وتغييرها عن طريق إعادة كتابة القليل من التعليمة البرمجية.
بعد ذلك، نناقش أوجه التشابه الأخرى بين استدعاء الإجراء عن بُعد (RPC) وواجهات REST API.
التجريد
في حين أن اتصالات الشبكة هي الهدف الرئيسي لواجهات برمجة التطبيقات، فإن الاتصالات ذات المستوى الأدنى نفسها يتم استخلاصها بعيدًا عن مطوري واجهات برمجة التطبيقات. يتيح ذلك للمطورين التركيز على الوظيفة بدلاً من التنفيذ الفني.
التواصل
كل من REST وRPC يستخدمان HTTP بوصفه البروتوكول الأساسي. تنسيقات الرسائل الأكثر شيوعًا في RPC وREST هي JSON وXML. يُفضل JSON نظرًا لقابليته للقراءة ومرونته.
التوافق عبر اللغات
يمكن للمطورين تنفيذ واجهة RESTful أو واجهة RPC API بأي لغة يختارونها. طالما أن عنصر اتصال الشبكة لواجهة برمجة التطبيقات يتوافق مع معيار واجهة RESTful أو RPC، فيمكنك كتابة بقية التعليمة البرمجية بأي لغة برمجة.
مبادئ التصميم: RPC مقابل REST
في استدعاء الإجراء عن بُعد (RPC)، يقوم العميل بإجراء استدعاء وظيفة عن بُعد (يُعرف أيضًا باسم الأسلوب أو الإجراء) على الخادم. عادةً ما يتم تمرير قيمة بيانات واحدة أو أكثر إلى الخادم أثناء الاستدعاء.
في المقابل، يطلب عميل REST من الخادم تنفيذ إجراء على مورد خادم معين. تقتصر الإجراءات على عمليات الإنشاء والقراءة والتحديث والحذف (CRUD) ويتم نقلها كأفعال HTTP أو أساليب HTTP.
يركز استدعاء الإجراء عن بُعد (RPC) على الوظائف أو الإجراءات، بينما يركز REST على الموارد أو الكائنات.
مبادئ استدعاء الإجراء عن بُعد (RPC)
بعد ذلك، نناقش بعض المبادئ التي تتبعها أنظمة استدعاء الإجراء عن بُعد (RPC) عادةً. ومع ذلك، فإن هذه المبادئ ليست موحدةً مثل REST.
الاستدعاء عن بُعد
يتم إجراء أحد استدعاءات RPC بواسطة عميل إلى وظيفة على الخادم البعيد كما لو تم استدعاؤها محليًا إلى العميل.
مَعْلمات التمرير
عادةً ما يرسل العميل المَعْلمات إلى وظيفة الخادم، تمامًا مثل الوظيفة المحلية.
الكعوب
توجد كعوب الوظائف على كل من العميل والخادم. من جانب العميل، يُجري استدعاء الوظيفة. على الخادم، يستدعي الوظيفة الفعلية.
مبادئ REST
مبادئ REST هي مبادئ قياسية موحدة. يجب أن تتبع واجهة REST API هذه المبادئ كي تُصنّف على أنها RESTful.
الخادم-العميل
تعمل بنية الخادم-العميل في REST على الفصل بين العملاء والخوادم. يتعامل مع كل منها كأنظمة مستقلة.
عديم الحالة
لا يحتفظ الخادم بأي سجل لحالة العميل بين طلبات العميل.
قابل للتخزين المؤقت
قد يقوم العميل أو الأنظمة الوسيطة بتخزين استجابات الخادم تخزينًا مؤقتًا استنادًا إلى ما إذا كان العميل يحدد إمكانية تخزين الاستجابة مؤقتًا.
النظام متعدد الطبقات
يمكن أن توجد أنظمة وسيطة بين العميل والخادم. ليس لدى كل من العميل والخادم أي معرفة بها ويعملان كما لو كانا متصلين بشكل مباشر.
الواجهة الموحدة
يتصل العميل والخادم عبر مجموعة قياسية موحدة من التعليمات وتنسيقات الرسائل باستخدام الواجهة REST API. تتحدد الموارد من خلال عنوان URL الخاص بها، ويُعرف عنوان URL هذا بنقطة نهاية REST API.
آلية العمل: RPC مقابل REST
في استدعاء الإجراء عن بُعد (RPC)، يستخدم العميل HTTP POST لاستدعاء وظيفة معينة حسب الاسم. كي يقوم استدعاء الإجراء عن بُعد (RPC) بمهمته، يجب أن يعرف المطورون من جانب العميل اسم الوظيفة والمَعْلمات مسبقًا.
في REST، يستخدم العملاء والخوادم أفعال HTTP مثل GET وPOST وPATCH وPUT وDELETE وOPTIONS لتنفيذ الخيارات. يحتاج المطورون فقط إلى معرفة عناوين URL الخاصة بموارد الخادم ولا داعي للقلق بشأن أسماء الوظائف الفردية.
يوضح الجدول التالي نوع التعليمة البرمجية التي يستخدمها العميل في تنفيذ إجراءات مماثلة في RPC وREST.
الإجراء |
RPC |
REST |
تعليق |
إضافة منتج جديد إلى قائمة منتجات |
POST /addProduct HTTP/1.1 HOST: api.example.com Content-Type: application/json {"name": "T-Shirt", "price": "22.00", "category": "Clothes"} |
POST /products HTTP/1.1 HOST: api.example.com Content-Type: application/json {"name": "T-Shirt", "price": "22.00", "category": "Clothes"} |
RPC يستخدم POST على الوظيفة، بينما REST يستخدم POST على عنوان URL. |
استرجاع تفاصيل منتج |
POST /getProduct HTTP/1.1 HOST: api.example.com Content-Type: application/json {"productID": "123”} |
GET /products/123 HTTP/1.1 HOST: api.example.com |
RPC يستخدم POST على الوظيفة ويمرر المَعْلمة ككائن JSON. REST يستخدم GET على URL ويمرر المَعْلمة في URL. |
تحديث سعر منتج |
POST /updateProductPrice HTTP/1.1 HOST: api.example.com Content-Type: application/json {"productId": "123", "newPrice": "20.00"} |
PUT /products/123 HTTP/1.1 HOST: api.example.com Content-Type: application/json {"price": "20.00"} |
RPC يستخدم POST على الوظيفة ويمرر المَعْلمة ككائن JSON. REST يستخدم PUT على URL ويمرر المَعْلمة في URL وككائن JSON. |
حذف منتج |
POST /deleteProduct HTTP/1.1 HOST: api.example.com Content-Type: application/json {"productId": "123""} |
DELETE /products/123 HTTP/1.1 HOST: api.example.com |
RPC يستخدم POST على الوظيفة ويمرر المَعْلمة ككائن JSON. REST يستخدم DELETE على عنوان URL ويمرر المَعْلمة في عنوان URL. |
الاختلافات الأساسية: مقابل REST
وفيما بعد سنقدم بعض الاختلافات.
تاريخ التطوير
تم تطوير استدعاء الإجراء عن بُعد (RPC) في أواخر السبعينيات وأوائل الثمانينيات، بينما كان REST مصطلحًا صاغه لأول مرة عالم الكمبيوتر روي فيلدينج في عام 2000.
التنسيق التشغيلي
تحتوي واجهة REST API على مجموعة قياسية موحدة من عمليات الخادم بسبب أساليب HTTP، لكن واجهات RPC API ليست كذلك. توفر بعض تطبيقات استدعاء الإجراء عن بُعد (RPC) إطارًا للعمليات الموحدة.
تنسيق تمرير البيانات
يُمكن لـ REST تمرير أي تنسيق بيانات وتمرير تنسيقات متعددة، مثل JSON وXML، داخل نفس واجهة برمجة التطبيقات.
إلا أنه في واجهات RPC API يتحدد تنسيق البيانات بواسطة الخادم ويتم إصلاحه أثناء التنفيذ. يمكن أن يكون لديك تطبيقات معينة من تطبيقات JSON RPC أو XML RPC، ولا يتمتع العميل بالمرونة.
الولاية
في سياق واجهات برمجة التطبيقات، تشير عديم الحالة إلى مبدأ تصميم لا يخزن فيه الخادم أي معلومات حول التفاعلات السابقة للعميل. يتم التعامل مع كل طلب من طلبات واجهة برمجة التطبيقات بشكل مستقل، ولا يعتمد الخادم على أي حالة عميل مخزنة لمعالجة الطلب.
يجب أن تكون أنظمة REST دائمًا عديمة الحالة، ولكن أنظمة RPC يمكن أن تكون ذات حالة أو عديمة الحالة، بناءً على التصميم.
حالات الاستخدام: RPC مقابل REST
عادةً يُستخدم استدعاء الإجراء عن بُعد (RPC) في استدعاء الوظائف البعيدة على خادم يتطلب نتيجة إجراء. يُمكنك استخدامه عندما تحتاج إلى عمليات حسابية معقدة أو تريد تشغيل إجراء بعيد على الخادم، مع إخفاء العملية عن العميل.
في ما يلي الإجراءات التي يكون فيها استدعاء الإجراء عن بُعد (RPC) خيارًا جيدًا:
- التقاط صورة بكاميرا جهاز بعيد
- استخدام إحدى خوارزميات تعلّم الآلة على الخادم لكشف الاحتيال
- تحويل الأموال من حساب إلى آخر على نظام مصرفي عن بُعد
- إعادة تشغيل الخادم عن بُعد
تُستخدم واجهة REST API عادةً في تنفيذ عمليات الإنشاء والقراءة والتحديث والحذف (CRUD) على كائن بيانات على خادم. هذا يجعل واجهات REST API مناسبةً تمامًا للحالات التي تحتاج فيها بيانات الخادم وهياكل البيانات إلى الكشف عنها بطريقة موحدة.
في ما يلي الإجراءات التي تكون فيها واجهة REST API خيارًا جيدًا:
- إضافة منتج إلى قاعدة بيانات
- استرجاع محتويات قائمة تشغيل موسيقى
- تحديث عنوان شخص
- حذف منشور مدونة
لماذا حلَّ REST محل RPC؟
في حين أن واجهات برمجة تطبيقات الويب التي يتم إنشاؤها باستخدام REST أصبحت القاعدة المتعارف عليها في الوقت الحالي، إلا أن استدعاء الإجراء عن بُعد (RPC) لم يختفِ ولا يزال يُستخدم. تُستخدم واجهة REST API عادةً في التطبيقات حيث يسهل على المطورين فهمها وتنفيذها. ومع ذلك، لا يزال استدعاء الإجراء عن بُعد (RPC) موجودًا ويستخدم عندما يكون أفضل وأنسب لحالة الاستخدام.
أصبحت التطبيقات الحديثة لاستدعاء الإجراء عن بُعد (RPC)، مثل gRPC، أكثر شيوعًا الآن. في بعض حالات الاستخدام، يعمل gRPC بشكل أفضل من استدعاء الإجراء عن بُعد (RPC) ومن REST. إنه يسمح بدفق اتصالات الخادم-العميل بدلاً من نمط تبادل البيانات بطريقة الطلب-والاستجابة.
ملخص الاختلافات: RPC مقابل REST
RPC |
REST |
|
ما التعريف؟ |
نظام يُتيح للعميل البعيد استدعاء إجراء على الخادم كما لو كان محليًا. |
مجموعة قواعد تحدد تبادل البيانات المهيكلة بين العميل والخادم. |
يُستخدم في |
تنفيذ الإجراءات على خادم بعيد. |
عمليات الإنشاء، والقراءة، والتحديث، والحذف (CRUD) على كائنات بعيدة. |
أفضل حالات الاستخدام |
عند طلب عمليات حسابية معقدة أو تشغيل عملية عن بُعد على الخادم. |
عندما تحتاج بيانات الخادم وهياكل البيانات إلى الكشف عنها بشكل موحد. |
صفة الحالة |
عديم الحالة أو ذو حالة. |
عديم الحالة |
تنسيق تمرير البيانات |
في بنية متسقة يحددها الخادم وتُفرض على العميل. |
في بنية يحددها الخادم بشكل مستقل. يمكن تمرير العديد من التنسيقات المختلفة داخل نفس واجهة برمجة التطبيقات. |
كيف تدعم AWS متطلبات واجهة برمجة التطبيقات؟
تمتلك Amazon Web Services (AWS) مجموعةً من الخدمات والأدوات التي تساعد مصممي واجهات برمجة التطبيقات في إنشاء التطبيقات والخدمات الحديثة المستندة إلى واجهة برمجة التطبيقات وتشغيل تلك التطبيقات والخدمات وإدارتها. لمزيد من المعلومات، اقرأ حول إنشاء تطبيقات حديثة على AWS.
فيما يلي أمثلة لخدمات AWS التي يمكن أن تساعدك في تلبية متطلبات واجهة برمجة التطبيقات:
- تسمح Amazon API Gateway للمطورين بإنشاء واجهات برمجة التطبيقات ونشرها وإدارتها على نطاق واسع. مع API Gateway، يُمكنك إنشاء واجهات REST API محسّنة لبنيات الخدمات المصغرة الموضوعة في حاويات وتطبيقات الويب.
- تعمل موازنة التحميل المرن (ELB) على توزيع حركة مرور الشبكة لتحسين قابلية توسّع التطبيقات. يُمكنها توجيه حركة مرور gRPC وموازنة تحميلها بين الخدمات المصغرة أو بين العملاء والخدمات الممًكّن عليها gRPC. وهذا من شأنه تحقيق انسيابية في إدارة حركة مرور gRPC في البنيات البرمجية؛ بدون تغيير أي من البنية التحتية الأساسية المتعلقة بالأجهزة العميلة والخدمات الخاصة بالعملاء.
- Amazon Virtual Private Cloud (Amazon VPC) Lattice هي خدمة شبكات تطبيقات تعمل بصفة مستمرة على توصيل الاتصالات بين خدماتك ومراقبة تلك الاتصالات وتأمينها. يُمكنك تلقائيًا توسعة نطاق موارد الحوسبة وموارد الشبكة لدعم أعباء عمل HTTP وHTTPS وgRPC ذات النطاق الترددي العالي.
ابدأ استخدام واجهات REST API وواجهات برمجة تطبيقات استدعاء الإجراء عن بُعد (RPC) على AWS عن طريق إنشاء حساب اليوم.