الأركان الثلاثة للتكامل: REST وGraphQL وgRPC في عالم JavaScript
\n\nتطوير JavaScript اليوم هو تبادل لا نهائي للبيانات. تطبيقك يسحب أسعار العملات، يرسل النماذج، يبث الفيديو أو يزامن المستندات في الوقت الفعلي. وفي كل مرة تختار كيف سيتواصل عميلك مع الخادم.
\n\nلفترة طويلة، كان المعيار هو REST. إنه بسيط مثل المطرقة. لكن للمشاريع المعقدة، المطرقة لا تكفي - تحتاج إلى سكين سويسري (GraphQL) أو حتى مطرقة ثقب (gRPC).
\n\nفي هذه المقالة، سنحلل ثلاثة مناهج رئيسية للعمل مع API في JavaScript. سترى أمثلة كود حقيقية، وستفهم نقاط القوة والضعف لكل بروتوكول، وستكون قادرًا على اختيار الأداة المناسبة لمشروعك القادم. هيا بنا!
\n\nREST API: الكلاسيكية التي لا تموت
\n\nREST (Representational State Transfer) هو أسلوب معماري وليس بروتوكولًا. معظم المطورين يفهمون REST على أنه طلبات HTTP للموارد (GET /users, POST /orders).
\n\nكيف يبدو طلب REST في JavaScript
\n\nالطريقة الأكثر شيوعًا هي استخدام fetch الأصلي أو مكتبة axios. إليك طلب GET نموذجي:
// الحصول على قائمة المستخدمين\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
العيوب الرئيسية لـ 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
GraphQL: اطلب فقط ما تحتاجه
\n\nGraphQL هي لغة استعلام وبيئة تشغيل أنشأتها Facebook (الآن Meta). بدلاً من نقاط نهاية متعددة، هناك نقطة نهاية واحدة، والعميل هو من يقرر الحقول التي سيحصل عليها.
\n\nكتابة استعلام GraphQL في JavaScript
\n\nللعمل مع GraphQL على العميل، غالبًا ما تُستخدم مكتبة @apollo/client أو urql. ولكن يمكن أيضًا استخدام fetch مباشرة:
// استعلام 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هل ترى الفرق