عميل HTTP لجافا سكريبت (Node.js): أفضل المكتبات للعمل مع الشبكة
في تطوير الويب الحديث باستخدام Node.js، يُعد إرسال طلبات HTTP من أكثر العمليات شيوعًا. سواء كان ذلك للتواصل مع REST API، أو تحميل الملفات، أو التفاعل مع الخدمات المصغرة - لا غنى عن عميل HTTP موثوق. في هذه المقالة، سنستعرض بالتفصيل أربع من أفضل المكتبات لجافا سكريبت (Node.js): Axios، Got، node-fetch و undici. ستتعرف على ميزاتها وأدائها وستحصل على أمثلة جاهزة للكود.
1. Axios - المعيار الشامل
Axios هو أشهر عميل HTTP لـ Node.js والمتصفحات. يعتمد على Promise ويدعم المعترضات (interceptors)، والتحليل التلقائي لـ JSON، والحماية من CSRF، وإلغاء الطلبات.
التثبيت:
npm install axiosمثال لطلب GET:
const axios = require('axios');
async function getUser(id) { try { const response = await axios.get(`https://api.example.com/users/${id}`); console.log(response.data); } catch (error) { console.error('خطأ:', error.message); }}
getUser(1);مثال لطلب POST مع الترويسات:
const axios = require('axios');
const data = { name: 'Alice', role: 'developer' };
axios.post('https://api.example.com/users', data, { headers: { 'Content-Type': 'application/json' }}).then(res => console.log(res.status));المزايا: البساطة، النظام البيئي الواسع، دعم تقدم التحميل.
العيوب: حجم الحزمة (~100 كيلوبايت)، زائد عن الحاجة للمهام البسيطة.
2. Got - سريع وغني بالوظائف
Got هو عميل HTTP خفيف الوزن مع واجهة برمجة تطبيقات غنية. يدعم النقل التدفقي، والتخزين المؤقت، وإعادة المحاولة، ويعمل بشكل أسرع من Axios.
التثبيت:
npm install gotمثال مع التدفق ومعالجة الأخطاء:
const got = require('got');const fs = require('fs');
async function downloadFile(url, outputPath) { try { const stream = got.stream(url); const fileStream = fs.createWriteStream(outputPath); stream.pipe(fileStream);
await new Promise((resolve, reject) => { stream.on('end', resolve); stream.on('error', reject); }); console.log('تم تحميل الملف'); } catch (error) { console.error('خطأ في التحميل:', error.message); }}
downloadFile('https://example.com/file.zip', './file.zip');مثال مع إعادة المحاولة:
const got = require('got');
got('https://api.example.com/data', { retry: { limit: 3, methods: ['GET'] }}).then(response => console.log(response.body));المزايا: حجم صغير، سرعة، إعادة محاولة مدمجة.
العيوب: واجهة برمجة تطبيقات أقل بديهية للمبتدئين.
3. node-fetch - بناء جملة مألوف من المتصفح
node-fetch هو نسخة من Fetch API للمتصفحات مخصصة لـ Node.js. مثالي إذا كنت معتادًا على fetch في المتصفح وترغب في كود موحد.
التثبيت:
npm install node-fetchمثال مع async/await:
const fetch = require('node-fetch');
async function getPosts() { 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.title);}
getPosts();مثال لإرسال FormData:
const fetch = require('node-fetch');const FormData = require('form-data');
const form = new FormData();form.append('file', fs.createReadStream('./photo.jpg'));\