JavaScript HTTP क्लाइंट: सही तरीके से रिक्वेस्ट करना — शुरू से अंत तक
\nआधुनिक वेब डेवलपमेंट में बाहरी API और सर्वर के साथ इंटरैक्शन एक नियमित लेकिन बेहद महत्वपूर्ण कार्य है। चाहे आप Node.js पर माइक्रोसर्विस लिख रहे हों, डेटा पार्स कर रहे हों, या कोई बॉट बना रहे हों, आपको एक भरोसेमंद HTTP क्लाइंट की आवश्यकता होगी। इस लेख में हम जानेंगे कि JavaScript (Node.js) में HTTP रिक्वेस्ट कैसे करें, लोकप्रिय लाइब्रेरीज़, एरर हैंडलिंग, टाइमआउट और बेस्ट प्रैक्टिसेज को कवर करेंगे।
\n\n1. बिल्ट-इन टूल्स: http मॉड्यूल और node-fetch
\nNode.js में बिल्ट-इन http और https मॉड्यूल हैं, लेकिन इनका API लो-लेवल है और रोज़मर्रा के उपयोग के लिए असुविधाजनक है। इसलिए ज़्यादातर डेवलपर रैपर लाइब्रेरीज़ का उपयोग करते हैं।
1.1. node-fetch (v3+)
\nNode.js के वर्शन 18 से fetch का बिल्ट-इन सपोर्ट (प्रायोगिक) आ गया है। पुराने वर्शन या अतिरिक्त सुविधाओं के लिए node-fetch पैकेज का उपयोग करें।
// इंस्टॉलेशन: npm install node-fetch\nimport fetch from 'node-fetch';\n\nasync function getUsers() {\n try {\n const response = await fetch('https://jsonplaceholder.typicode.com/users');\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = await response.json();\n console.log(data);\n } catch (error) {\n console.error('रिक्वेस्ट में त्रुटि:', error.message);\n }\n}\n\ngetUsers();\n\n1.2. बिल्ट-इन fetch (Node.js 18+)
\nब्राउज़र fetch की तरह ही उपयोग होता है:
\n// Node.js 18+ बिना अतिरिक्त पैकेज के\nasync function postData() {\n const response = await fetch('https://api.example.com/data', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ key: 'value' })\n });\n return response.json();\n}\n\n2. Axios — HTTP क्लाइंट का गोल्ड स्टैंडर्ड
\nAxios JavaScript में HTTP रिक्वेस्ट के लिए सबसे लोकप्रिय लाइब्रेरी है। यह आसान इंटरफ़ेस, प्रॉमिस सपोर्ट, इंटरसेप्टर और ऑटोमैटिक JSON ट्रांसफ़ॉर्मेशन प्रदान करता है।
\n\n2.1. इंस्टॉलेशन और बेसिक GET-रिक्वेस्ट
\n// npm install axios\nconst axios = require('axios');\n\nasync function fetchUsers() {\n try {\n const response = await axios.get('https://jsonplaceholder.typicode.com/users');\n console.log(response.data); // डेटा पहले से पार्स हो चुका है\n } catch (error) {\n console.error('त्रुटि:', error.message);\n }\n}\n\n2.2. डेटा के साथ POST-रिक्वेस्ट
\nasync function createUser() {\n const newUser = { name: 'राहुल', email: 'rahul@example.com' };\n const response = await axios.post('https://jsonplaceholder.typicode.com/users', newUser);\n console.log('यूज़र बनाया गया:', response.data);\n}\n\n2.3. टाइमआउट और हेडर सेट करना
\nटाइमआउट एप्लिकेशन को हैंग होने से बचाने के लिए बेहद ज़रूरी है:
\nasync function fetchWithTimeout() {\n try {\n const response = await axios.get('https://slow-api.example.com/data', {\n timeout: 5000, // 5 सेकंड\n headers: {\n 'Authorization': 'Bearer token123',\n 'Accept': 'application/json'\n }\n });\n return response.data;\n } catch (error) {\n if (error.code === 'ECONNABORTED') {\n console.error('रिक्वेस्ट टाइमआउट');\n }\n }\n}\n\n3. एडवांस्ड तकनीकें और बेस्ट प्रैक्टिसेज
\n\n3.1. एरर हैंडलिंग और रीट्राई (पुनः प्रयास)
\nनेटवर्क अस्थिर होते हैं, इसलिए रीट्राई मैकेनिज़्म लागू करना ज़रूरी है:
\nasync function fetchWithRetry(url, retries = 3) {\n for (let i = 0; i < retries; i++) {\n try {\n const response = await axios.get(url);\n return response.data;\n } catch (error) {\n if (i === retries - 1) throw error; // आखिरी प्रयास\n console.log(`प्रयास ${i + 1} विफल, ${(i + 1) * 1000}ms बाद पुनः प्रयास...`);\n await new Promise(