GraphQL مقابل REST: كل ما تحتاج إلى معرفته

نشرت: 2022-09-20

قد يكون من الصعب اختيار التقنيات التي سيتم تضمينها في المجموعة التقنية لمشروعك التالي. في كثير من الحالات - وخاصة عندما يتعلق الأمر بالاختيار بين GraphQL و RESTful APIs - يتعلق الأمر باختيار بنية تصميم API التالية الأفضل.

هناك أربع طرق مهمة لإنشاء واجهات برمجة التطبيقات: SOAP و GRPC و REST و GraphQL. غالبًا ما نحصر أذهاننا في REST و GraphQL كلما أردنا إنشاء واجهات برمجة تطبيقات. هذا لأن REST غيرت الطرق التقليدية لبناء واجهات برمجة التطبيقات باستخدام SOAP و GRPC.

يتم تمييز GraphQL على نطاق واسع بأنها REST أفضل لأنها تمثل طريقة أفضل لبناء واجهات برمجة التطبيقات. يعتقد العديد من المطورين أن GraphQL ستحل محل REST. اكتشف الكثيرون بالفعل أن GraphQL تساعد في حل بعض التحديات الشائعة التي يواجهها المطورون أثناء إنشاء واجهات برمجة تطبيقات REST.

تعرف على كيفية اختيار أفضل بنية وتصميم لواجهة برمجة التطبيقات لمشروعك في هذا الدليل انقر للتغريد

هاتان الطريقتان لبناء واجهات برمجة التطبيقات مختلفة تمامًا. في الممارسة العملية ، تعمل هذه التقنيات عن طريق إرسال طلب HTTP وتلقي النتيجة. كلاهما لهما إيجابيات وسلبيات ، وفي هذه المقالة ، سنناقش باستفاضة هاتين التقنيتين العظيمتين اللتين غيّرتا طريقة تطويرنا لواجهات برمجة التطبيقات وتوسيع نطاقها.

قبل أن نتعمق في التفاصيل ، دعنا أولاً نستكشف معنى GraphQL و RESTful APIs.

ما هي GraphQL؟

GraphQL هي لغة استعلام API بالإضافة إلى وقت تشغيل للإجابة على هذه الاستفسارات بالبيانات الموجودة. كما يأتي مزودًا بأدوات قوية للتعامل حتى مع أكثر الاستعلامات تعقيدًا.

الميزة المركزية لـ GraphQL هي قدرتها على طلب واستلام البيانات المحددة المطلوبة فقط - لا شيء أكثر من ذلك. هذا يجعل من الأسهل بكثير توسيع نطاق واجهات برمجة التطبيقات الخاصة بك مع تطبيقك.

الجزء الأكثر إثارة في GraphQL هو قدرتها على تزويدك بكل البيانات في نقطة نهاية واحدة.

لقطة شاشة لمخطط انسيابي لهندسة GraphQL API.
بنية واجهة برمجة تطبيقات GraphQL.

الرسم البياني أعلاه هو تمثيل نموذجي لهندسة GraphQL. يقدم العملاء طلبات من أجهزة مختلفة ، وتعالج GraphQL طلباتهم وتعيد البيانات المطلوبة فقط. هذا يحل بدقة مشكلة الجلب الزائد والجلب المنخفض في RESTful APIs.

لقطة شاشة لملعب GraphQL تعرض استعلامًا ناجحًا.
استعلام ناجح في ملعب GraphQL.

في النموذج أعلاه ، نعرض ملعب GraphQL وكيف يمكنك الاستعلام عن البيانات بنقطة نهاية واحدة. في الجزء العلوي توجد نقطة نهاية واجهة برمجة التطبيقات ، وعلى اليسار يوجد الاستعلام الذي يطلب أسماء القارات ، وأخيرًا ، على اليمين ، نرد على الاستعلام الذي طلبناه.

تم إنشاء GraphQL بواسطة Facebook لغرض أساسي هو حل تجربة مطور تطبيقات الأجهزة المحمولة أثناء العمل مع واجهات برمجة تطبيقات REST. منذ إصدار أول إصدار مفتوح المصدر في عام 2015 ، شهدت GraphQL نموًا هائلاً بسبب اعتماد التكنولوجيا من قبل اللاعبين الكبار في مجال التكنولوجيا.

الشركات التي تستخدم GraphQL

فيما يلي قائمة ببعض الشركات والتطبيقات التي تستخدم GraphQL بنشاط على خوادمها.

فيسبوك

أنشأ Facebook GraphQL ، وقد استخدموها في الإنتاج لتشغيل تطبيقات الأجهزة المحمولة الخاصة بهم منذ عام 2012. فتحت شركة الشبكات الاجتماعية التي تبلغ تكلفتها عدة مليارات من الدولارات مواصفات GraphQL في عام 2015 ، مما جعلها متاحة عبر العديد من البيئات وللفرق من جميع الأحجام .

لقطة شاشة لصفحة تسجيل الدخول إلى Facebook.
يستخدم Facebook GraphQL.

جيثب

تعلن GitHub أيضًا عن استخدام GraphQL من خلال توفير واجهة برمجة تطبيقات GraphQL لإنشاء عمليات تكامل واسترداد البيانات وأتمتة تدفقات عملك باستخدام واجهة برمجة تطبيقات GitHub GraphQL. توفر واجهة برمجة تطبيقات GitHub GraphQL استعلامات أكثر دقة ومرونة من واجهة برمجة تطبيقات GitHub REST.

لقطة شاشة لصفحة GitHub الرئيسية.
يستخدم GitHub أيضًا GraphQL.

بينتيريست

تعد Pinterest أيضًا من أوائل المتبنين لـ GraphQL. ناقش عملاق مشاركة الصور علنًا استكشافه المبكر لـ GraphQL وكيف يستخدمون تقنية GraphQL التي تدعم شركتهم التي تبلغ قيمتها مليار دولار.

لقطة شاشة لصفحة Pinterest الرئيسية.
تستخدم Pinterest GraphQL لموقعها أيضًا.

تعمل العديد من الشركات الأخرى التي تبلغ قيمتها مليارات الدولارات مثل Intuit و Shopify و Coursera و Airbnb على تشغيل تطبيقاتها باستخدام GraphQL. وهذا التفضيل الواسع النطاق لـ REST مستمر في النمو.

ما هو RESTful API؟

REST تعني "النقل التمثيلي للحالة" ، وهو نمط معماري برمجي لأنظمة الوسائط التشعبية الموزعة. يحدد المبادئ والقيود الخاصة بتبادل الموارد بين الخادم والعملاء.

إذا تم اتباع هذه المبادئ في API ، فسيتم الإشارة إلى تطبيق API هذا باسم "RESTful". يعد WordPress REST API مثالًا رئيسيًا على ذلك.

فيما يلي بعض المبادئ والقيود التي يجب أن تفي بها API ليتم الإشارة إليها باسم Restful API:

  • Client-Server Decouple: العملاء (الواجهة الأمامية) والخادم (الواجهة الخلفية) منفصلون تمامًا ولا يمكنهم الاتصال إلا من خلال نقاط النهاية.
  • واجهة موحدة: البيانات التي تظهر في الواجهة متطابقة عبر جميع الأجهزة.
  • انعدام الجنسية: لا يتذكر الخادم ما إذا كان الطلب الحالي قد تم إجراؤه لأول مرة أم لا. في كل مرة يتم فيها تقديم طلب ، يجب تضمين جميع المعلومات اللازمة لمعالجته من البداية.
  • قابلية التخزين المؤقت: يُسمح بالتخزين المؤقت وتخزين الجلسة ، ولكن يجب تكوينهما للسماح للمستخدمين النهائيين بإلغاء الاشتراك في التخزين المؤقت للبيانات.
  • بنية النظام ذات الطبقات: يجب تصميم واجهات برمجة التطبيقات بحيث لا يمكن للعميل أو الخادم معرفة ما إذا كانوا يتواصلون بشكل مباشر أو من خلال وسيط.

الرسم البياني أدناه لهيكل REST الأساسي. يوضح كيف يتم التعامل مع الطلبات والاستجابات بشكل نموذجي.

لقطة شاشة تعرض مخططًا فرعيًا لهندسة RESTful API.
بنية REST API.

فوائد GraphQL

فيما يلي بعض فوائد استخدام GraphQL ، والتي توضح سبب كونها أكثر من كافية لبناء التطبيق التالي الذي تبلغ قيمته مليار دولار.

إحضار البيانات من خلال نقطة نهاية واحدة لواجهة برمجة التطبيقات

تتمثل أهم ميزة لـ GraphQL في قدرتها على الوصول إلى أي أو كل نقاط البيانات من خلال نقطة نهاية واحدة لواجهة برمجة التطبيقات.

واحدة من أكثر المشاكل شيوعًا في RESTful APIs هي وجود عدد كبير جدًا من نقاط النهاية للوصول إلى المعلومات. في GraphQL ، لديك نقطة نهاية واحدة فقط ، لذلك لا تحتاج إلى إرسال طلبات متعددة لاسترداد معلومات مختلفة حول كائن ما.

يوضح الرسم البياني أدناه مثالاً واضحًا لاسترداد الموارد باستخدام RESTful API و GraphQL. يمكنك أن ترى أن هناك نقطة نهاية واحدة فقط للوصول إلى المورد في خادم GraphQL ، بينما هناك حاجة إلى نقاط نهاية متعددة لواجهة برمجة التطبيقات للوصول إلى موارد مختلفة في RESTful API.

مخطط انسيابي يوضح استعلامات متعددة في RESTful API وكيفية معالجتها في GraphQL.
نقاط نهاية API في REST و GraphQL.

لا الإفراط في الجلب أو النقص في الجلب

تعد مشكلة الجلب الزائد أو الناقص مشكلة معروفة في RESTful APIs. يحدث هذا عندما يقوم العملاء بتنزيل البيانات عن طريق الوصول إلى نقاط النهاية التي تُرجع هياكل البيانات الثابتة ، أو يقومون باسترداد أكثر أو أقل مما توقعوه.

يؤدي الإفراط في الجلب إلى تلقي الطلب - أو "الجلب" - بيانات أكثر مما هو مطلوب في طلب معين. تخيل أنك تجلب جميع المستخدمين في جدول بهدف عرض أسماء المستخدمين الخاصة بهم على صفحتك الرئيسية. في هذه الحالة ، سيعيد الجلب الزائد جميع البيانات الخاصة بكل مستخدم ، بما في ذلك (وليس فقط) الاسم.

يعد الجلب الناقص نادرًا نسبيًا ، ولكنه يحدث عندما تفشل نقطة النهاية المحددة في توفير جميع المعلومات المطلوبة. سيحتاج العميل إلى تقديم طلبات إضافية للوصول إلى المعلومات الأخرى حسب الحاجة.

تحل GraphQL بكفاءة مشكلة الإفراط في الجلب أو الجلب الناقص عن طريق الاستيلاء على المورد الدقيق الذي طلبه العميل دون أي تفاصيل إضافية.

معالجة أفضل للأنظمة المعقدة والخدمات الدقيقة

تستطيع GraphQL توحيد وإخفاء تعقيد الأنظمة المتعددة المتكاملة.

على سبيل المثال ، لنفترض أننا نريد الانتقال من تطبيق الواجهة الخلفية الأحادي إلى بنية الخدمات المصغرة. تساعد واجهة برمجة تطبيقات GraphQL في التعامل مع الاتصال بين الخدمات الصغيرة المتنوعة من خلال دمجها في مخطط GraphQL واحد.

بمجرد تحديد هذه المخططات ، يمكن لكل من الواجهة الأمامية والخلفية التواصل بشكل منفصل دون أي تغييرات أخرى ، نظرًا لأن الواجهة الأمامية تعلم أن البيانات في المخطط ستكون دائمًا متزامنة عبر النظام.

سريع وآمن

يمكن أن تؤدي مشكلة الجلب المفرط إلى زيادة استهلاك النطاق الترددي للعملاء ، مما قد يؤدي ، في الوقت المناسب ، إلى تأخر تطبيقك. استخدام أنماط تصميم RESTful API يستغرق وقتًا طويلاً لفرز المعلومات المطلوبة من حمولة هائلة.

نظرًا لقدرة GraphQL على تجنب الإفراط في الجلب وقلة الجلب ، يُرجع الخادم شكلاً آمنًا وسهل القراءة ويمكن التنبؤ به مما يجعل طلبات واجهة برمجة التطبيقات واستجاباتك أسرع.

فوائد REST

على الرغم من تزايد شعبية GraphQL ، إلا أن REST لا يزال أحد أكثر معايير API شيوعًا. دعونا نلقي نظرة خاطفة على السبب.

  • منحنى التعلم: RESTful APIs هي الأسهل في التعلم والفهم. هذه هي ميزته الأساسية على واجهات برمجة التطبيقات الأخرى.
  • التسلسل: يأتي REST بنهج وتنسيقات مرنة لتسلسل البيانات في JSON.
  • التخزين المؤقت: يمكن لـ REST API إدارة حمولة عالية بمساعدة خادم وكيل HTTP وذاكرة التخزين المؤقت.
  • طلب معقد: تمتلك REST APIs نقطة نهاية منفصلة لطلبات مختلفة ، وهذا يساعد في جعل الطلب المعقد أكثر قابلية للإدارة من واجهات برمجة التطبيقات الأخرى
  • نظيفة وبسيطة: REST APIs أنيقة وبسيطة ونظيفة. من السهل استكشافها.
  • إجراءات HTTP القياسية: يستخدم REST وسائل استدعاء إجراء HTTP القياسية لاسترداد البيانات وتقديم الطلبات.
  • العميل / الخادم: هذا يعني أن منطق العمل الخاص به منفصل عن العرض التقديمي. لذا يمكنك تغيير أحدهما دون التأثير على الآخر.
  • REST بدون حالة: تحتوي جميع الرسائل المتبادلة بين العميل والخادم على كل السياق المطلوب لمعرفة ما يجب فعله بالرسالة.

عيوب GraphQL

الآن بعد أن ناقشنا إيجابيات GraphQL مقابل REST ، دعنا نستكشف بعض عيوب GraphQL:

  • منحنى التعلم الصعب: ليس من السهل تعلم GraphQL مثل REST. يتمثل الجزء الأكثر تحديًا في بناء واجهة برمجة تطبيقات GraphQL في تصميم المخطط. هذا يستغرق الكثير من الوقت والمعرفة بالمجال.
  • تحميل الملف: لا تحتوي GraphQL على ميزة تحميل ملف أصلي. يمكن حل هذا باستخدام ترميز Base64 ، لكن تكلفة التشفير وفك التشفير بهذه الطريقة يمكن أن تستغرق وقتًا طويلاً ومكلفة.
  • التخزين المؤقت على الويب: يساعد التخزين المؤقت على تقليل حركة المرور المتكررة إلى الخادم ، مما يؤدي إلى تسريع الطلبات وعملية الاستجابة عن طريق الاحتفاظ بالمعلومات التي يتم الوصول إليها بشكل متكرر بالقرب من الخادم. لا تدعم GraphQL أو تعتمد على أساليب التخزين المؤقت لـ HTTP ، وتعتمد بدلاً من ذلك على آليات التخزين المؤقت لعملاء Apollo أو Relay.
  • غير مناسب للتطبيقات الصغيرة: قد لا تكون GraphQL أفضل بنية واجهة برمجة تطبيقات لإنشاء تطبيق صغير. إذا كان تطبيقك لا يتطلب الاستعلامات الأكثر مرونة التي تقدمها GraphQL ، فإن REST هو السبيل للذهاب.
  • مشكلة الاستعلام المعقدة: يمكن أن تؤدي قدرة GraphQL على إعطاء العميل ما يريده بالضبط إلى مشكلات في انتشار الاستعلام. إذا أرسل العميل عددًا كبيرًا جدًا من الاستعلامات المتداخلة ، فقد يؤدي ذلك إلى إرسال استعلامات خاطئة ، مما قد يستغرق وقتًا طويلاً جدًا للخادم. من الأفضل استخدام REST مع نقاط نهاية مخصصة لتلبية مثل هذه الطلبات.

عيوب REST

الآن ، دعنا نوجه انتباهنا إلى بعض عيوب REST:

هل تعاني من مشاكل التوقف و WordPress؟ Kinsta هو حل الاستضافة المصمم لتوفير الوقت! تحقق من ميزاتنا
  • رحلات متعددة ذهابًا وإيابًا: تتمثل أكبر مشكلة في واجهات برمجة تطبيقات REST في طبيعة العديد من نقاط النهاية. هذا يعني أنه بالنسبة للعميل للحصول على جميع الموارد لتطبيق كامل ، فإنه يحتاج إلى القيام برحلات ذهابًا وإيابًا لا حصر لها للحصول على البيانات.
  • الإفراط في الجلب ونقص الجلب: تعد مشكلة الجلب الزائد ونقص الجلب عيبًا رئيسيًا في RESTful APIS. يمكن أن يتسبب ذلك في تأخر الاستجابات بسبب جلب حمولات كبيرة غير مرغوب فيها.
  • التسلسل الهرمي: نظرًا لأن واجهات برمجة تطبيقات REST مبنية على موارد مرجعية URI ، فهي غير مناسبة للموارد التي لا يتم تنظيمها بشكل طبيعي أو الوصول إليها في تسلسل هرمي بسيط.

لماذا استخدم GraphQL بدلاً من REST

بعد ذلك ، سنناقش سبب رغبتك في التفكير في GraphQL لتطوير واجهة برمجة التطبيقات المستقبلية بدلاً من RESTful API.

مخطط مكتوب بقوة

تستخدم GraphQL نظامًا قويًا من النوع لتحديد إمكانيات واجهة برمجة التطبيقات. في GraphQL ، تُستخدم لغة تعريف المخطط (SDL) لتحديد المعلمات المحيطة بكيفية وصول العميل إلى بيانات الخادم. تتم كتابة جميع واجهات برمجة التطبيقات التي يتم عرضها للعميل في SDL ، مما يحل مشكلة عدم تناسق البيانات التي تظهر في واجهات برمجة تطبيقات RESTful.

لا الإفراط في الجلب أو الجلب الناقص

تعد مشكلة الجلب الزائد أو الناقص مشكلة معروفة في واجهات برمجة تطبيقات RESTful حيث يسترجع العملاء معلومات أكثر أو أقل مما طلبوه. تحل GraphQL هذه المشكلة من خلال توفير وسيط للعميل لتحديد المعلومات المطلوبة ، ثم إعادة تلك المعلومات المحددة بالضبط - وفقط -.

نقاط نهاية متعددة

واحدة من أكبر مشاكل RESTful APIs هي وجود عدد كبير جدًا من نقاط النهاية للوصول إلى المعلومات.

لنفترض أنك تريد الوصول إلى مستخدم معين عبر رقم معرفه. سيتم تقديمك بنقطة نهاية مثل /users/1 . ولكن إذا كنت ترغب في الوصول إلى صور هذا المستخدم ، فسيتعين عليك إرسال طلب إلى نقطة نهاية أخرى ، مثل /users/1/photos .

في GraphQL ، لديك نقطة نهاية واحدة ، ولا تحتاج إلى إرسال طلبات متعددة لاسترداد معلومات مختلفة عن المستخدم.

GraphQL مقابل REST Showdown

أخيرًا ، سنستكشف الفرق الرئيسي بين GraphQL و RESTful APIs. بعد ذلك ، سنناقش بعض ميزات التصميم الجيد لواجهة برمجة التطبيقات ونقارن كيف تتعامل معها كل تقنية.

أداء

ليس هناك شك في أن GraphQL تؤدي أداءً أسرع من RESTful APIs نظرًا لقدرتها على توفير نقطة نهاية واحدة للوصول إلى جميع مواردك. تستخدم واجهات برمجة تطبيقات RESTful نقاط نهاية متعددة ، مما قد يؤدي إلى زمن انتقال الشبكة.

تعقيد الاستعلام

نظرًا لعدم فصل نقاط النهاية إلى نقاط نهاية متعددة ، يمكن أن تصبح استعلامات GraphQL معقدة بشكل متزايد بمرور الوقت. من ناحية أخرى ، يتم فصل نقاط نهاية RESTful API ، مما يقصر RESTful APIs على استعلامات بسيطة.

الشعبية ودعم المجتمع

GraphQL هي نمط معماري متزايد لواجهة برمجة التطبيقات ولغة استعلام. على الرغم من أنها لا تزال صغيرة ، إلا أن معدل اعتمادها وتجمع مواردها ينموان بسرعة ، والموارد وفيرة بالفعل للمهتمين بتعلمها بأنفسهم.

من ناحية أخرى ، تفتخر REST بالفعل بدعم المجتمع الواسع وتستمر الشركات من جميع الأنواع في استخدامها ، بدءًا من تلك التي تبني خدمات صغيرة إلى تلك التي تنشئ تطبيقات اجتماعية معقدة وما بعدها.

في الوقت الحالي ، تعد مسابقة الشعبية بين GraphQL و REST بمثابة قرعة. يستمر استخدام كلتا التقنيتين على نطاق واسع ودعمهما جيدًا من قبل مجتمع التنمية.

منحنى التعلم

منحنى التعلم في GraphQL شديد الانحدار. يتطلب معرفة جيدة بالمجال لتطوير API وهندسة البرمجيات العامة. سيجد المبتدئ الكامل صعوبة في فهم GraphQL جيدًا بما يكفي لبناء تطبيق معقد.

على العكس من ذلك ، من السهل جدًا البدء في REST وتتطلب معرفة أقل بالمجال خارج البوابة. تم دمج RESTful API جيدًا في معظم لغات البرمجة الرئيسية والأطر الشائعة ، مما يجعل تعلمها أمرًا سهلاً للغاية.

لقطة شاشة تعرض مقارنة GraphQL مقابل RESTful API.
GraphQL مقابل REST.

ملخص

GraphQL هي تقنية جديدة تتبع في مسارات الأنماط المعمارية لـ RESTful API ، تمامًا كما تم تقديم REST لحل المشكلات المتعلقة بأنماط SOAP API.

تقدم لك GraphQL ردودًا أسرع ، ونقطة نهاية واحدة لواجهة برمجة التطبيقات لجميع استفساراتك ، ومخطط صارم للوصول المتسق إلى البيانات. هذه الأسباب هي التي جعلت الشركات التي تبلغ قيمتها مليارات الدولارات تبدأ في التحول إلى GraphQL ، حتى في المرحلة المبكرة. ومع ذلك ، على الرغم من قيودها ، فإن REST السلف لـ GraphQL يواصل الحفاظ على حضور قوي على المسرح.

GraphQL أم واجهات برمجة تطبيقات RESTful؟ تعرف على المزيد في هذا الدليل انقر للتغريد

في هذا الدليل ، استكشفنا كل ما تحتاج لمعرفته حول GraphQL وواجهات برمجة تطبيقات RESTful ، بما في ذلك مزايا وعيوب كل تقنية ، من أجل مساعدتك بثقة في تحديد أي تقنية تفضلها. لقد ناقشنا أيضًا المشكلات المعروفة مع واجهات برمجة تطبيقات RESTful - مثل الإفراط في الجلب ونقص الجلب ونقاط النهاية المتعددة - وكيف تحاول GraphQL حل هذه المشكلات وتعزيز أداء تطبيقك.

لديك الآن نظرة ثاقبة كافية لاختيار ما إذا كانت GraphQL مقابل REST مناسبة لمشروعك التالي. أخبرنا في قسم التعليقات بما ستبنيه مع الفائز الذي اخترته!