هل تريد أن تتعلم كيفية إجراء طلبات GET في Node.js؟ إذا كانت الإجابة بنعم، فأنت في المكان الصحيح. في هذه المقالة، سأوضح لك كيفية استخدام وحدة http المدمجة ومكتبة axios الشهيرة لإجراء طلبات GET في Node.js. سأشرح أيضًا ما هي طلبات GET، ولماذا هي مهمة، وكيفية التعامل مع بيانات الاستجابة. بحلول نهاية هذه المقالة، ستكون قادرًا على إجراء طلبات GET في Node.js مثل المحترفين.
ما هو طلب GET؟
طلب GET هو أحد أنواع طلبات HTTP الأكثر شيوعًا. HTTP تعني بروتوكول نقل النصوص التشعبية، وهو البروتوكول القياسي للتواصل بين متصفحات الويب وخوادم الويب. طلبات HTTP هي رسائل ترسلها متصفحات الويب إلى خوادم الويب لطلب أو إرسال بيانات. استجابات HTTP هي رسائل ترسلها خوادم الويب مرة أخرى إلى متصفحات الويب لتسليم البيانات المطلوبة أو لتأكيد الإرسال.
طلب GET هو نوع من طلبات HTTP التي تطلب من خادم الويب إرسال مورد محدد. على سبيل المثال، عندما تقوم بكتابة عنوان URL في متصفح الويب الخاص بك، فإنك تقوم بإجراء طلب GET إلى خادم الويب ليقوم بإرسال صفحة الويب المرتبطة بهذا العنوان. يمكن أيضًا أن يتضمن طلب GET بعض معلمات الاستعلام، وهي أزواج من المفاتيح والقيم التي توفر معلومات إضافية أو تقوم بتصفية المورد المطلوب. على سبيل المثال، عندما تبحث عن شيء على Google، فإنك تقوم بإجراء طلب GET إلى خادم الويب Google مع بعض معلمات الاستعلام التي تحدد مصطلح البحث الخاص بك، واللغة، وخيارات أخرى.
لماذا تعتبر طلبات GET مهمة؟
طلبات GET مهمة لأنها الطريقة الرئيسية لاسترجاع البيانات من خوادم الويب. يمكنك استخدام طلبات GET للوصول إلى أنواع مختلفة من البيانات، مثل HTML، JSON، XML، الصور، الفيديوهات، وأكثر. يمكنك أيضًا استخدام طلبات GET للتفاعل مع واجهات برمجة التطبيقات على الويب، وهي واجهات تتيح لك الوصول إلى البيانات والخدمات من تطبيقات ويب أخرى. على سبيل المثال، يمكنك استخدام طلبات GET للحصول على معلومات الطقس من واجهة برمجة التطبيقات OpenWeatherMap، أو للحصول على معلومات حول الأفلام من واجهة برمجة التطبيقات IMDb، أو للحصول على صور للكلاب من واجهة برمجة التطبيقات Dog.
طلبات GET مهمة أيضًا لأنها سهلة الاستخدام والاختبار. يمكنك إجراء طلبات GET باستخدام أي متصفح ويب، دون الحاجة إلى أي أدوات أو مكتبات خاصة. يمكنك أيضًا استخدام أدوات مثل Postman أو Apidog لإجراء واختبار طلبات GET مع معلمات ورؤوس مختلفة. يمكنك أيضًا فحص بيانات الاستجابة والرؤوس باستخدام أدوات مطوري المتصفح أو واجهة الأداة.
ما هو NodeJs؟
Node.js هو بيئة تشغيل JavaScript تسمح لك بتشغيل كود JavaScript خارج متصفح الويب. تعتمد Node.js على محرك JavaScript Google Chrome V8، وتستخدم لبناء تطبيقات الويب، وخاصة التطبيقات التي تتطلب البيانات بشكل مكثف وفي الوقت الحقيقي. تحتوي Node.js أيضًا على مكتبة كبيرة من الوحدات والحزم التي يمكنك استخدامها لإضافة وظائف لمشاريعك. بعض فوائد Node.js هي:
- إنها سريعة وقابلة للتوسع، بفضل طبيعتها غير المتزامنة والمبنية على الأحداث.
- إنها متعددة المنصات ومفتوحة المصدر، مما يعني أنه يمكنك تشغيلها على أنظمة تشغيل مختلفة والمساهمة في تطويرها.
- إنها متسقة وموحدة، حيث يمكنك استخدام نفس اللغة لكل من الواجهة الأمامية والواجهة الخلفية لتطبيق الويب الخاص بك.

كيفية إجراء طلب GET في Node.js باستخدام وحدة http؟
Node.js هو بيئة تشغيل JavaScript تسمح لك بتشغيل كود JavaScript خارج المتصفح. غالبًا ما يُستخدم Node.js لإنشاء خوادم الويب وتطبيقات الويب وواجهات برمجة التطبيقات على الويب. توفر Node.js أيضًا وحدة http مدمجة تسمح لك بإجراء طلبات واستجابات HTTP.
لإجراء طلب GET في Node.js باستخدام وحدة http، تحتاج إلى اتباع الخطوات التالية:
- استيراد وحدة
httpباستخدام وظيفةrequire. - إنشاء كائن
optionsيحتوي على المعلومات حول طلب GET، مثل اسم المضيف، ورقم المنفذ، والمسار، والرؤوس. - استخدم طريقة
http.getلإجراء طلب GET، مع تمرير كائنoptionsكأول وسيط ودالة رد الاتصال كوسيط ثانٍ. سيتم تنفيذ دالة رد الاتصال عند تلقي الاستجابة، وستحتوي على كائنresponseكوسيط لها. - استخدم كائن
responseللتعامل مع بيانات الاستجابة والرؤوس. كائنresponseهو نسخة من فئةhttp.IncomingMessage، التي تقوم بتنفيذ واجهةReadableStream. وهذا يعني أنه يمكنك استخدام كائنresponseكتيار من البيانات، والاستماع إلى أحداث مثلdata،end، وerror. يمكنك أيضًا استخدام خاصيةresponse.statusCodeللحصول على رمز حالة الاستجابة، وخاصيةresponse.headersللحصول على رؤوس الاستجابة. - استخدم طريقة
response.onلتسجيل مستمعي الأحداث لكائنresponse. على سبيل المثال، يمكنك استخدام طريقةresponse.on('data', callback)للاستماع إلى حدثdata، والذي سيتم إصدار عند تلقي جزء من البيانات. ستحتوي دالة رد الاتصال على كائنchunkكوسيط لها، وهو عبارة عن مخزن للبيانات. يمكنك استخدام طريقةchunk.toString()لتحويل المخزن إلى سلسلة، وإضافته إلى متغير لتخزين بيانات الاستجابة كاملة. يمكنك أيضًا استخدام طريقةresponse.on('end', callback)للاستماع إلى حدثend، والذي سيتم إصداره عند اكتمال الاستجابة. لن تحتوي دالة رد الاتصال على أي وسائط، ويمكنك استخدامها لأداء أي إجراءات نهائية، مثل تسجيل الدخول أو تحليل بيانات الاستجابة. يمكنك أيضًا استخدام طريقةresponse.on('error', callback)للاستماع إلى حدثerror، والذي سيتم إصداره عند حدوث خطأ أثناء الاستجابة. ستحتوي دالة رد الاتصال على كائنerrorكوسيط لها، ويمكنك استخدامه للتعامل مع الخطأ، مثل تسجيله أو رميه.
إليك مثال عن كيفية إجراء طلب GET في Node.js باستخدام وحدة http:
// استيراد وحدة http
const http = require('http');
// إنشاء كائن options
const options = {
hostname: 'api.openweathermap.org',
port: 80,
path: '/data/2.5/weather?q=Los%20Angeles&appid=YOUR_API_KEY',
headers: {
'User-Agent': 'Node.js'
}
};
// إجراء طلب GET
http.get(options, (response) => {
// تهيئة متغير لتخزين بيانات الاستجابة
let data = '';
// الاستماع إلى حدث data
response.on('data', (chunk) => {
// إضافة الجزء إلى المتغير data
data += chunk.toString();
});
// الاستماع إلى حدث end
response.on('end', () => {
// تسجيل رمز الحالة والرؤوس
console.log(`Status code: ${response.statusCode}`);
console.log(`Headers: ${JSON.stringify(response.headers)}`);
// تحليل البيانات كـ JSON
const weather = JSON.parse(data);
// تسجيل معلومات الطقس
console.log(`City: ${weather.name}`);
console.log(`Temperature: ${weather.main.temp}`);
console.log(`Description: ${weather.weather[0].description}`);
});
// الاستماع إلى حدث error
response.on('error', (error) => {
// رمي الخطأ
throw error;
});
});
كيفية إجراء طلب GET في Node.js باستخدام مكتبة axios؟
وحدة http هي وحدة منخفضة المستوى توفر الوظائف الأساسية لإجراء طلبات واستجابات HTTP. ومع ذلك، إذا كنت ترغب في استخدام وحدة ذات مستوى أعلى وأكثر سهولة، يمكنك استخدام مكتبة axios. Axios هي مكتبة شهيرة وقوية تتيح لك إجراء طلبات HTTP والتعامل مع الاستجابات باستخدام الوعود (promises) وترميز async/await. تدعم Axios أيضًا ميزات مثل المكونات الإضافية (interceptors)، المحولات (transformers)، عمليات التأخير (timeouts)، رموز الإلغاء (cancel tokens)، وأكثر.
لإجراء طلب GET في Node.js باستخدام مكتبة axios، تحتاج إلى اتباع الخطوات التالية:
- تثبيت مكتبة
axiosباستخدام أمرnpm:npm install axios. - استيراد مكتبة
axiosباستخدام وظيفةrequire. - استخدم طريقة
axios.getلإجراء طلب GET، مع تمرير عنوان URL للمورد كأول وسيط وكائنconfigاختياري كوسيط ثانٍ. يمكن أن يحتوي كائنconfigعلى معلومات حول طلب GET، مثل الرؤوس والمعلمات والوقت المستغرق، وأكثر. ستعيد طريقةaxios.getوعدًا (promise)، والذي سيحل إلى كائنresponseأو يرفض إلى كائنerror. - استخدم طريقة
thenللتعامل مع الوعد المحل، مع تمرير دالة رد الاتصال كأول وسيط. ستحتوي دالة رد الاتصال على كائنresponseكوسيط لها، والذي يحتوي على بيانات الاستجابة والحالة والرؤوس، وأكثر. يمكنك استخدام خاصيةresponse.dataللوصول إلى بيانات الاستجابة، وخاصيةresponse.statusللوصول إلى رمز حالة الاستجابة. يمكنك أيضًا استخدام طريقةcatchللتعامل مع الوعد المرفوض، مع تمرير دالة رد الاتصال كأول وسيط. ستحتوي دالة رد الاتصال على كائنerrorكوسيط لها، والذي يحتوي على رسالة الخطأ، والرمز، والطلب، والاستجابة. يمكنك استخدام خاصيةerror.responseللوصول إلى كائن الاستجابة، وخاصيةerror.requestللوصول إلى كائن الطلب. - بدلاً من ذلك، يمكنك استخدام ترميز
async/awaitلإجراء طلب GET والتعامل مع الاستجابة. للقيام بذلك، تحتاج إلى استخدام الكلمة الرئيسيةasyncقبل الدالة التي تحتوي على طلب GET، والكلمة الرئيسيةawaitقبل طريقةaxios.get. سيسمح لك ذلك بكتابة كود غير متزامن بشكل متزامن، وتعيين كائنresponseإلى متغير. يمكنك بعد ذلك استخدام كتلةtry/catchللتعامل مع أي أخطاء قد تحدث أثناء طلب GET.
إليك مثال عن كيفية إجراء طلب GET في Node.js باستخدام مكتبة axios:
// استيراد مكتبة axios
const axios = require('axios');
// إجراء طلب GET باستخدام طريقة then
axios.get('http://api.openweathermap.org/data/2.5/weather?q=Los%20Angeles&appid=YOUR_API_KEY', {
headers: {
'User-Agent': 'Node.js'
}
}).then((response) => {
// تسجيل رمز الحالة والرؤوس
console.log(`Status code: ${response.status}`);
console.log(`Headers: ${JSON.stringify(response.headers)}`);
// تسجيل معلومات الطقس
console.log(`City: ${response.data.name}`);
console.log(`Temperature: ${response.data.main.temp}`);
console.log(`Description: ${response.data.weather[0].description}`);
}).catch((error) => {
// تسجيل رسالة الخطأ والرمز
console.log(`Error message: ${error.message}`);
console.log(`Error code: ${error.code}`);
// تسجيل حالة الاستجابة وبياناتها إذا كانت متاحة
if (error.response) {
console.log(`Response status: ${error.response.status}`);
console.log(`Response data: ${JSON.stringify(error.response.data)}`);
}
// تسجيل طريقة الطلب ومساره إذا كانت متاحة
if (error.request) {
console.log(`Request method: ${error.request.method}`);
console.log(`Request path: ${error.request.path}`);
}
});
// إجراء طلب GET باستخدام ترميز async/await
async function getWeather() {
try {
// انتظار طلب GET وتعيين كائن الاستجابة إلى متغير
const response = await axios.get('http://api.openweathermap.org/data/2.5/weather?q=Los%20Angeles&appid=YOUR_API_KEY', {
headers: {
'User-Agent': 'Node.js'
}
});
// تسجيل رمز الحالة والرؤوس
console.log(`Status code: ${response.status}`);
console.log(`Headers: ${JSON.stringify(response.headers)}`);
// تسجيل معلومات الطقس
console.log(`City: ${response.data.name}`);
console.log(`Temperature: ${response.data.main.temp}`);
console.log(`Description: ${response.data.weather[0].description}`);
} catch (error) {
// تسجيل رسالة الخطأ والرمز
console.log(`Error message: ${error.message}`);
console.log(`Error code: ${error.code}`);
// تسجيل حالة الاستجابة وبياناتها إذا كانت متاحة
if (error.response) {
console.log(`Response status: ${error.response.status}`);
console.log(`Response data: ${JSON.stringify(error.response.data)}`);
}
// تسجيل طريقة الطلب ومساره إذا كانت متاحة
if (error.request) {
console.log(`Request method: ${error.request.method}`);
console.log(`Request path: ${error.request.path}`);
}
}
}
// استدعاء دالة getWeather
getWeather();
كيفية التعامل مع بيانات الاستجابة في Node.js؟
بمجرد إجراء طلب GET في Node.js واستلام الاستجابة، قد ترغب في القيام بشيء ما مع بيانات الاستجابة. على سبيل المثال، قد ترغب في عرض البيانات على وحدة التحكم، أو حفظ البيانات في ملف، أو تحليل البيانات كتشفير JSON أو XML، أو استخدام البيانات لغرض آخر.
اعتمادًا على نوع وهئية بيانات الاستجابة، قد تحتاج إلى استخدام طرق ووحدات مختلفة للتعامل مع البيانات. إليك بعض السيناريوهات الشائعة وكيفية التعامل معها:
- إذا كانت بيانات الاستجابة سلسلة نصية، يمكنك ببساطة استخدام طريقة
console.logلعرض البيانات على وحدة التحكم، أو استخدام طريقةfs.writeFileلحفظ البيانات في ملف. وحدةfsهي وحدة مدمجة تتيح لك العمل مع نظام الملفات في Node.js. يمكنك استيراد وحدةfsباستخدام وظيفةrequire، واستخدام طريقةfs.writeFileلكتابة البيانات إلى ملف، مع تمرير اسم الملف، والبيانات، ودالة رد الاتصال كوسائط. ستحتوي دالة رد الاتصال على كائنerrorكوسيط لها، ويمكنك استخدامه للتعامل مع أي أخطاء قد تحدث أثناء كتابة الملف. - إذا كانت بيانات الاستجابة مخزنًا، يمكنك استخدام طريقة
buffer.toStringلتحويل المخزن إلى سلسلة، ثم استخدام نفس الطرق كما في الأعلى لعرض البيانات أو حفظها. المخزن هو نوع بيانات ثنائي يمثل سلسلة من البايتات. غالبًا ما تُستخدم المخازن للتعامل مع البيانات الثنائية، مثل الصور، والفيديوهات، أو الملفات المضغوطة. يمكنك استخدام طريقةbuffer.toStringلتحويل المخزن إلى سلسلة، مع تمرير وسيط ترميز اختياري لتحديد ترميز الحروف للسلسلة. الترميز الافتراضي هوutf8، وهو أكثر ترميز شائع لبيانات النصوص. - إذا كانت بيانات الاستجابة JSON، يمكنك استخدام طريقة
JSON.parseلتحليل البيانات ككائن JavaScript، ثم استخدام خصائص وطرق الكائن للوصول إلى البيانات والتلاعب بها. JSON تعني تنسيق كائن JavaScript، وهو تنسيق قياسي لتبادل وتخزين البيانات. بيانات JSON عبارة عن سلسلة تتبع تركيبًا محددًا، والذي يتكون من أزواج مفاتيح وقيم مُحاطة بأقواس متعرجة، ومصفوفات مُحاطة بأقواس مربعة. يمكنك استخدام طريقةJSON.parseلتحليل سلسلة JSON ككائن JavaScript، مع تمرير سلسلة JSON كوسيط. ستُعيد الطريقة كائن JavaScript يمكنك استخدامه مثل أي كائن آخر. - إذا كانت بيانات الاستجابة XML، يمكنك استخدام مكتبة
xml2jsلتحليل البيانات ككائن JavaScript، ثم استخدام خصائص وطرق الكائن للوصول إلى البيانات والتلاعب بها. XML تعني لغة ترميز قابلة للتوسع، وهي تنسيق قياسي آخر لتبادل وتخزين البيانات. بيانات XML هي سلسلة تتبع تركيبًا محددًا، والذي يتكون من عناصر مُحاطة بتسميات، وصفات مُحاطة بأقواس، ومحتوى نصي. مكتبةxml2jsهي مكتبة طرف ثالث تتيح لك تحويل بيانات XML إلى كائنات JavaScript والعكس. يمكنك تثبيت مكتبةxml2jsباستخدام أمرnpm:npm install xml2js. يمكنك استيراد مكتبةxml2jsباستخدام وظيفةrequire، واستخدام طريقةxml2js.parseStringلتحليل سلسلة XML ككائن JavaScript، مع تمرير سلسلة XML ودالة رد الاتصال كوسائط. ستحتوي دالة رد الاتصال على كائنerrorوكائنresultكوسائط لها، يمكنك استخدامهما للتعامل مع أي أخطاء أو للوصول إلى الكائن المحلل.
كيفية اختبار طلب GET HTTP في NodeJs باستخدام Apidog؟
لاختبار طلب GET HTTP باستخدام Apidog، تحتاج إلى اتباع الخطوات البسيطة التالية:
- فتح Apidog والنقر على زر "طلب جديد" لإنشاء طلب جديد.

2. اختر "GET" كطريقة الطلب.

3. أدخل عنوان URL لنقطة نهاية واجهة برمجة التطبيقات

ثم انقر على زر "إرسال" لإرسال الطلب إلى واجهة برمجة التطبيقات.

كما ترى، يُظهر لك Apidog عنوان URL، والمعلمات، والرؤوس، وجسد الطلب، وحالة الاستجابة، والرؤوس، وجسد الاستجابة. يمكنك أيضًا رؤية وقت الاستجابة، والحجم، وصيغة الطلب والاستجابة، ومقارنتها مع واجهات برمجة التطبيقات المختلفة على الويب.
الخاتمة
في هذه المقالة، أظهرت لك كيفية إجراء طلبات GET في Node.js باستخدام وحدة http ومكتبة axios. كما أظهرت لك كيفية التعامل مع بيانات الاستجابة في صيغ وسيناريوهات مختلفة. آمل أن تكون قد تعلمت شيئًا مفيدًا واستمتعت بقراءة هذه المقالة.
شكرًا لقراءتك وبالتوفيق في البرمجة!
