العربية
  • GraphQL
  • REST API
  • RESTful API

GraphQL مقابل REST API

استكشف الفروق الرئيسية بين GraphQL و REST APIs، وفوائد كل منهما، ومتى ينبغي استخدام كل منهما لتحقيق تطوير ويب أمثل.

Darcy Ye
Darcy Ye
Developer
Simeng
Simeng
Developer

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

كمسار للتواصل لنقل البيانات بين مكونات البرمجيات عبر الإنترنت، تلعب APIs دورًا لا غنى عنه في هياكل خدمات الويب الحديثة، فهي تعمل كالأكسجين. تكنولوجيا الـAPI، مثل SOAP (بروتوكول رسائل لخدمات الويب)، وREST (نمط معماري)، وGraphQL (لغة استعلام وأداة)، تسهل تطوير البرمجيات عن طريق دعم التكامل وتبادل البيانات بين الخدمات المختلفة، مما يجعل التطوير أكثر ملاءمة ومرونة.

على الرغم من تعدد أنواع الـAPIs، تركز النقاشات في السنوات الأخيرة بشكل رئيسي على اثنين من النماذج الرئيسية: REST (نقل حالة تمثيلية) وGraphQL. كلاهما يقدم مجموعة من المزايا ويُستخدم عالميًا في مشاريع الويب. ومع ذلك، يختلفان بشكل كبير في كيفية إدارة الاتصال بالبيانات.

ما هو REST API؟

REST هو نمط معماري منظم تم تطويره في أوائل القرن الحادي والعشرين لبناء تطبيقات الهايبر ميديا عبر الشبكة، مصمم لاعتماد بروتوكول اتصال قابل للتخزين المؤقت بدون دولة بين العملاء والخوادم. REST API (المعروفة أيضًا باسم RESTful API) هي المحرك للهندسة المعمارية لـ REST.

يستخدم REST API معرفات موارد موحدة (URIs) لمعالجة الموارد. يعمل REST API باستخدام نقاط نهاية مختلفة لأداء عمليات CRUD (إنشاء، قراءة، تحديث، وحذف) على موارد الشبكة. يعتمد على تنسيقات بيانات محددة مسبقًا (تعرف بأنواع الوسائط أو أنواع MIME) لتحديد شكل وحجم الموارد التي يوفرها للعملاء. أكثر التنسيقات شيوعًا هي JSON وXML (وأحيانًا HTML أو نص عادي).

بعد أن يطلب العميل موردًا، يقوم الخادم بمعالجة الاستعلام ويعود بجميع البيانات المتعلقة بتلك المورد. يحتوي الرد على رموز الرد الخاصة بـ HTTP مثل "200 OK" (لاستجابة REST ناجحة) و"404 Not Found" (لمورد غير موجود).

كيف يعمل REST API؟

تعتمد REST APIs على نقاط نهاية محددة مسبقًا تقوم بعرض الموارد عبر HTTP. كل نقطة نهاية تمثل موردًا، مثل المستخدمين أو المنشورات، ويتم التعرف عليها بواسطة عنوان URL فريد. ترتبط عمليات REST بطرق HTTP قياسية مثل GET، POST، PUT، وDELETE، والتي تتوافق مع استرجاع، إنشاء، تحديث، وحذف البيانات.

على سبيل المثال، طلب إلى GET /users يسترجع قائمة كاملة من المستخدمين، بينما GET /users/123 يجلب تفاصيل مستخدم محدد يعرف بواسطة معرفه. إذا كنت بحاجة أيضًا للوصول إلى بيانات متعلقة، مثل مؤسسات المستخدم وأدوار المنظمة، سيتعين عليك إجراء مكالمات إضافية إلى GET /users/123/organizations.

يتبع REST نهجًا محورًا حول الموارد، يركز على الوصول إلى الموارد المنفصلة والتلاعب بها.

ما هو GraphQL؟

GraphQL هو نوع API (أو لغة استعلام) ومحرك تنفيذ للرد على تلك الاستعلامات. يقدم API مبسطًا ويصلح بشكل خاص للتطبيقات المحمولة وتنفيذ البنى المعقدة التي تتطلب مجموعات فرعية معينة من البيانات.

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

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

كيف يعمل GraphQL؟

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

لذلك، يجب أن يكون التنفيذ الكامل لـGraphQL له جزأين: المخطط والمقررات.

مخطط GraphQL

تحدد المخططات أنواع البيانات وحقولها التي يمكن استرجاعها من خلال استعلامات GraphQL:

على سبيل المثال، افترض أن لديك المخطط التالي:

يمكن للعميل استعلام عن اسم المستخدم، البريد الإلكتروني، المؤسسات، والأدوار باستخدام الاستعلام التالي:

هذا الاستعلام لا يجلب فقط الحقول المطلوبة (البريد الإلكتروني والمؤسسات) بل أيضًا يسترجع البيانات المتعلقة (الأدوار) في طلب واحد.

مقرر GraphQL

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

في المثال أعلاه، سيكون مقرات المخطط كالتالي:

هناك نوعان من المقررات: مقررات الجذر ومقررات الحقل.

  • مقررات الجذر: تتعامل مع الحقول من المستوى الأعلى في المخطط، مثل Query، Mutation، وSubscription.
  • مقررات الحقل: تتعامل مع الحقول الفردية داخل نوع ما، غالبًا لأجل الاستعلامات المتداخلة. إذا لم يتم توفير مقرر محدد لحقل ما، يستخدم GraphQL المقرر الافتراضي، الذي يعيد القيمة من الكائن الأب بالاسم المطابق للحقل.

عمليات GraphQL

يدعم GraphQL ثلاثة أنواع من العمليات: الاستعلامات، التحولات، والاشتراكات.

  • Query: يستخدم لقراءة البيانات.
  • Mutation: يستخدم لكتابة البيانات، بما في ذلك العمليات لإضافة، تعديل، وحذف البيانات.
  • Subscription: يستخدم لطلب اتصال دائم للبيانات، مما يسمح للعميل بتحديد أنواع الأحداث التي يهتم بها والبيانات التي يجب إعادتها.

الفروق بين GraphQL و REST APIs

GraphQL و REST APIs هي أدوات لتبادل البيانات بين خدمات الويب المختلفة، لكن نظرًا لنهجها المختلف في حل المشاكل، إليك الفروق الرئيسية بينهما:

جلب البيانات

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

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

المرونة

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

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

التخزين المؤقت

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

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

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

الإيجابيات والسلبيات

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

الخاتمة

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

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