API في JavaScript: REST، GraphQL، gRPC — ماذا تختار في 2025؟

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الأركان الثلاثة للتكامل: REST وGraphQL وgRPC في عالم JavaScript

\n\n

تطوير JavaScript اليوم هو تبادل لا نهائي للبيانات. تطبيقك يسحب أسعار العملات، يرسل النماذج، يبث الفيديو أو يزامن المستندات في الوقت الفعلي. وفي كل مرة تختار كيف سيتواصل عميلك مع الخادم.

\n\n

لفترة طويلة، كان المعيار هو REST. إنه بسيط مثل المطرقة. لكن للمشاريع المعقدة، المطرقة لا تكفي - تحتاج إلى سكين سويسري (GraphQL) أو حتى مطرقة ثقب (gRPC).

\n\n

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

\n\n

REST API: الكلاسيكية التي لا تموت

\n\n

REST (Representational State Transfer) هو أسلوب معماري وليس بروتوكولًا. معظم المطورين يفهمون REST على أنه طلبات HTTP للموارد (GET /users, POST /orders).

\n\n

كيف يبدو طلب REST في JavaScript

\n\n

الطريقة الأكثر شيوعًا هي استخدام fetch الأصلي أو مكتبة axios. إليك طلب GET نموذجي:

\n\n
// الحصول على قائمة المستخدمين\nconst getUsers = async () => {\n  const response = await fetch('https://api.example.com/users');\n  if (!response.ok) {\n    throw new Error(`خطأ HTTP! الحالة: ${response.status}`);\n  }\n  const data = await response.json();\n  return data;\n};\n\n// مثال على الاستخدام\ntry {\n  const users = await getUsers();\n  console.log(users);\n} catch (error) {\n  console.error('خطأ في تحميل المستخدمين:', error);\n}\n
\n\n

مزايا REST لمطور JavaScript

\n\n
    \n
  • البساطة والقابلية للتنبؤ. GET, POST, PUT, DELETE — كل فعل له معنى واضح.
  • \n
  • التخزين المؤقت. التخزين المؤقت لـ HTTP يعمل فورًا، مما يسرع الطلبات المتكررة.
  • \n
  • دعم واسع. أي خلفية بأي لغة يمكنها تقديم REST.
  • \n
  • الأدوات. Postman, Swagger, Insomnia — نظام بيئي ضخم للاختبار.
  • \n
\n\n

العيوب الرئيسية لـ REST

\n\n
    \n
  • Over-fetching (زيادة البيانات). تطلب /users، والخادم يعيد جميع الحقول، بما في ذلك كلمة المرور (التجزئة طبعًا) والمعرفات الداخلية، بينما تحتاج فقط الاسم والبريد الإلكتروني.
  • \n
  • Under-fetching (نقص البيانات). للحصول على مستخدم وطلباته الأخيرة، تحتاج إلى طلبين: /users/1 و /users/1/orders.
  • \n
  • نقاط نهاية متعددة. المنطق التجاري المعقد يولد عشرات عناوين URL التي يصعب صيانتها.
  • \n
\n\n
\n

متى تختار REST؟ مثالي لتطبيقات CRUD البسيطة، واجهات API العامة، والمشاريع التي تهم فيها البساطة والتخزين المؤقت.

\n
\n\n

GraphQL: اطلب فقط ما تحتاجه

\n\n

GraphQL هي لغة استعلام وبيئة تشغيل أنشأتها Facebook (الآن Meta). بدلاً من نقاط نهاية متعددة، هناك نقطة نهاية واحدة، والعميل هو من يقرر الحقول التي سيحصل عليها.

\n\n

كتابة استعلام GraphQL في JavaScript

\n\n

للعمل مع GraphQL على العميل، غالبًا ما تُستخدم مكتبة @apollo/client أو urql. ولكن يمكن أيضًا استخدام fetch مباشرة:

\n\n
// استعلام GraphQL عبر fetch\nconst query = `\n  query {\n    user(id: "123") {\n      name\n      email\n      posts {\n        title\n        createdAt\n      }\n    }\n  }\n`;\n\nconst fetchUserWithPosts = async () => {\n  const response = await fetch('https://api.example.com/graphql', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ query })\n  });\n  const result = await response.json();\n  return result.data;\n};\n\n// الاستدعاء\nfetchUserWithPosts().then(data => console.log(data));\n
\n\n

هل ترى الفرق

المدونات

توصيات الكتب