عميل HTTP لجافا سكريبت (Node.js): أفضل المكتبات للعمل مع الشبكة
نادرًا ما يخلو التطوير الحديث على Node.js من التفاعل مع الخدمات الخارجية. سواء كانت REST API، نقاط نهاية GraphQL، أو تدفق البيانات - ستحتاج إلى عميل HTTP موثوق. في هذه المقالة، سنستعرض أفضل المكتبات لتنفيذ طلبات HTTP في بيئة Node.js، وميزاتها وأمثلة على استخدامها.
1. Axios - الخيار الشامل
Axios هو أشهر عميل HTTP لـ Node.js والمتصفحات. يعتمد على الـ Promises، ويدعم المعترضات (interceptors)، والتحويل التلقائي لـ JSON، وإلغاء الطلبات.
التثبيت
npm install axiosمثال لطلب GET
const axios = require('axios');
async function getUsers() { try { const response = await axios.get('https://jsonplaceholder.typicode.com/users'); console.log(response.data); } catch (error) { console.error('خطأ:', error.message); }}
getUsers();الميزات:
- دعم
CancelTokenلإلغاء الطلبات - معالجة تلقائية لأخطاء HTTP (الحالات 4xx و 5xx)
- يعمل على الخادم وفي المتصفح
- دعم تقدم التحميل/التنزيل
2. Got - الأداء والمرونة
Got مكتبة خفيفة وسريعة، مصممة خصيصًا لـ Node.js. تقدم واجهة برمجة تطبيقات غنية وأداء ممتاز بفضل استخدام وحدات http و https مباشرة.
التثبيت
npm install gotمثال لطلب POST
const got = require('got');
async function createPost() { try { const response = await got.post('https://jsonplaceholder.typicode.com/posts', { json: { title: 'منشور جديد', body: 'محتوى المنشور', userId: 1 }, responseType: 'json' }); console.log(response.body); } catch (error) { console.error('خطأ:', error.message); }}
createPost();الميزات:
- دعم التدفقات (streams) والترقيم (pagination)
- دعم مدمج لإعادة المحاولة (retry)
- العمل مع الكوكيز والتخزين المؤقت
- دعم HTTP/2 (عبر
http2-wrapper)
3. Node.js Fetch API - المعيار الأصلي
بدءًا من Node.js 18، أصبح Fetch API وحدة مدمجة (متاحة عالميًا). هذا تطبيق لنفس الـ API الموجود في المتصفحات، مما يبسط الكود الشامل.
مثال للاستخدام
async function fetchData() { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts/1'); if (!response.ok) throw new Error('خطأ HTTP: ' + response.status); const data = await response.json(); console.log(data); } catch (error) { console.error('خطأ:', error.message); }}
fetchData();الميزات:
- لا يتطلب تثبيتًا - مدمج في Node.js 18+
- API قياسي، مألوف لمطوري الواجهة الأمامية
- دعم
AbortControllerلإلغاء الطلبات - إمكانيات محدودة مقارنة بـ Axios/Got (مثل عدم وجود معترضات)
4. undici - عميل HTTP/1.1 عالي الأداء
undici هو عميل HTTP سريع وحديث، يشكل الأساس لـ Fetch المدمج في Node.js. تم تحسينه لتحقيق أقصى إنتاجية.
التثبيت
npm install undiciمثال لطلب
const { request } = require('undici');
async function fetchWithUndici() { try { const { statusCode, body } = await request('https://jsonplaceholder.typicode.com/users'); const data = await body.json(); console.log('الحالة:', statusCode); console.log('ال