curl کمانڈز کو JavaScript کوڈ میں تبدیل کریں - API ریکویسٹس کے لیے استعمال کے لیے تیار JavaScript fetch/axios کوڈ تیار کریں
// JavaScript code will appear here // Example: // Using fetch API fetch('https://api.example.com/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'test' }) }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));
یہاں کچھ عام curl کمانڈز ہیں جنہیں آپ JavaScript کوڈ میں تبدیل کر سکتے ہیں:
curl https://api.example.com/users
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","email":"[email protected]"}' https://api.example.com/users
curl -X PUT -H "Authorization: Bearer token123" -d '{"status":"active"}' https://api.example.com/users/1
curl -X DELETE https://api.example.com/users/1
curl -H "X-API-Key: abc123" -H "Accept: application/json" https://api.example.com/data
JavaScript HTTP ریکویسٹس بنانے کے متعدد طریقے پیش کرتا ہے۔ یہاں Fetch API اور Axios دونوں کا استعمال کرتے ہوئے عام پیٹرنز ہیں:
const formData = new FormData(); formData.append('file', document.querySelector('#fileInput').files[0]); fetch('https://api.example.com/upload', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN_HERE' }, body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));
const controller = new AbortController(); const signal = controller.signal; // Set timeout of 5 seconds const timeoutId = setTimeout(() => controller.abort(), 5000); fetch('https://api.example.com/data', { method: 'GET', signal: signal }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } clearTimeout(timeoutId); return response.json(); }) .then(data => console.log(data)) .catch(error => { if (error.name === 'AbortError') { console.error('Request timed out'); } else { console.error('Error:', error); } });
اپنی curl کمانڈ کاپی کریں → ان پٹ باکس میں پیسٹ کریں → فوری طور پر JavaScript کوڈ حاصل کریں
axios.get('https://api.example.com/data') .then(response => { console.log(response.data); }) .catch(error => { if (error.response) { // Server returned an error status code console.error(`Server error: ${error.response.status}`); console.error(error.response.data); } else if (error.request) { // Request was made but no response received console.error('Network error - no response received'); } else { // Error in request setup console.error('Request error:', error.message); } });
// Using fetch with AbortController const controller = new AbortController(); const signal = controller.signal; // Cancel request after 5 seconds setTimeout(() => controller.abort(), 5000); fetch('https://api.example.com/data', { signal }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => { if (error.name === 'AbortError') { console.log('Request was cancelled'); } else { console.error('Error:', error); } }); // Using axios with CancelToken const source = axios.CancelToken.source(); // Cancel request after 5 seconds setTimeout(() => { source.cancel('User cancelled the request'); }, 5000); axios.get('https://api.example.com/data', { cancelToken: source.token }) .then(response => console.log(response.data)) .catch(error => { if (axios.isCancel(error)) { console.log('Request cancelled:', error.message); } else { console.error('Error:', error); } });
جواب: جبکہ curl HTTP ریکویسٹس بنانے کے لیے ایک کمانڈ لائن ٹول ہے، JavaScript کی fetch API ویب براؤزرز اور Node.js کے اندر ایک پروگراماٹک انٹرفیس فراہم کرتی ہے۔ Fetch غیر ہمزمان آپریشنز کو سنبھالنے کے لیے Promises کا استعمال کرتا ہے، جبکہ curl ہمزمان طور پر چلتا ہے۔ اس کے علاوہ، fetch خودکار طور پر ریڈائریکٹس کی پیروی کرتا ہے اور ڈیفالٹ طور پر کوکیز نہیں بھیجتا، جبکہ curl دونوں کرتا ہے جب تک کہ دوسری صورت میں کنفیگر نہ کیا جائے۔
جواب: Fetch جدید براؤزرز میں بلٹ-ان ہے لیکن ایرر ہینڈلنگ کے لیے زیادہ بوائلر پلیٹ کی ضرورت ہوتی ہے اور خودکار طور پر JSON ریسپانسز کو پارس نہیں کرتا۔ Axios ایک لائبریری ہے جو خودکار JSON پارسنگ، بہتر ایرر ہینڈلنگ، ریکویسٹ/ریسپانس انٹرسیپشن، اور بلٹ-ان ریکویسٹ کینسلیشن کے ساتھ ایک زیادہ فیچر-امیر API فراہم کرتی ہے۔ Axios براؤزرز اور Node.js ماحول میں بھی مستقل طور پر کام کرتا ہے۔
جواب: CORS (کراس-اوریجن ریسورس شیئرنگ) کی پابندیاں براؤزر پر مبنی JavaScript پر لاگو ہوتی ہیں لیکن curl پر نہیں۔ curl کمانڈز کو JavaScript میں تبدیل کرتے وقت، آپ کو CORS ایررز کا سامنا ہو سکتا ہے اگر سرور مناسب CORS ہیڈرز شامل نہیں کرتا۔ حل میں شامل ہیں: CORS پراکسی کا استعمال، API مالک سے CORS ہیڈرز کو فعال کرنے کی درخواست، اپنی ایپلیکیشن میں سرور-سائیڈ پراکسی کو نافذ کرنا، یا ایسی ریکویسٹس کے لیے Node.js کا استعمال کرنا جو براؤزر میں نہیں چلتیں۔
جواب: براؤزر پر مبنی JavaScript میں، آپ SSL سرٹیفکیٹ ویریفیکیشن کو بائی پاس نہیں کر سکتے کیونکہ یہ براؤزرز کے ذریعے نافذ کردہ ایک سیکیورٹی فیچر ہے۔ Node.js میں، آپ HTTPS ایجنٹ کنفیگریشن میں rejectUnauthorized: false
آپشن سیٹ کر سکتے ہیں۔ تاہم، یہ پروڈکشن میں سختی سے غیر مستحسن ہے کیونکہ یہ سیکیورٹی کو خطرے میں ڈالتا ہے۔ مثال: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});
جواب: JavaScript میں curl کے -F فلیگ کی طرح فائل اپلوڈز کو سنبھالنے کے لیے، FormData API کا استعمال کریں۔ مثال کے طور پر: const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData });
یہ طریقہ fetch اور axios دونوں کے ساتھ کام کرتا ہے۔
جواب: fetch API کے ساتھ، AbortController کو setTimeout کے ساتھ استعمال کریں: const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal });
axios کے ساتھ، timeout آپشن کا استعمال کریں: axios.get(url, { timeout: 5000 });
دونوں طریقے آپ کو کنٹرول کرنے کی اجازت دیتے ہیں کہ ریکویسٹ کو منسوخ کرنے سے پہلے کتنا انتظار کرنا ہے۔
جواب: جبکہ curl تفصیلی ریکویسٹ/ریسپانس معلومات کے لیے -v/--verbose فلیگ پیش کرتا ہے، JavaScript مختلف ڈیبگنگ ٹولز فراہم کرتا ہے۔ براؤزرز میں، ریکویسٹس، ہیڈرز، پے لوڈز، اور ٹائمنگ کا معائنہ کرنے کے لیے DevTools میں نیٹ ورک ٹیب کا استعمال کریں۔ پروگراماٹک ڈیبگنگ کے لیے، آپ ریکویسٹ/ریسپانس تفصیلات کو لاگ کرنے کے لیے axios انٹرسیپٹرز کا استعمال کر سکتے ہیں یا fetch کے ساتھ کسٹم لاگنگ کو نافذ کر سکتے ہیں۔ Node.js میں، آپ 'http-debug' جیسی لائبریریز کا استعمال کر سکتے ہیں یا NODE_DEBUG=http ماحولیاتی متغیر سیٹ کر سکتے ہیں۔
JavaScript کے ساتھ موثر API ٹیسٹنگ کے لیے curl کمانڈز کو سمجھنا ضروری ہے۔ یہاں ہمارے کنورٹر کے ذریعے سپورٹ کردہ عام curl آپشنز کا ایک فوری حوالہ ہے:
curl [options] [URL]
-X, --request METHOD
: Specify request method (GET, POST, PUT, DELETE, etc.)-H, --header LINE
: Add header to the request-d, --data DATA
: Send data in POST request-F, --form CONTENT
: Submit form data-u, --user USER:PASSWORD
: Server user and password-k, --insecure
: Allow insecure server connections-I, --head
: Show document info only-v, --verbose
: Make the operation more verbose-s, --silent
: Silent mode--connect-timeout SECONDS
: Maximum time for connectionہمارا JavaScript کنورٹر متعدد ہیڈرز، اتھنٹیکیشن، ڈیٹا پے لوڈز، اور مختلف آپشنز سمیت پیچیدہ curl کمانڈز کو سنبھالتا ہے۔ بس اپنی curl کمانڈ پیسٹ کریں اور Fetch API یا Axios کا استعمال کرتے ہوئے صاف، جدید JavaScript کوڈ حاصل کریں۔
JavaScript کے Fetch API یا Axios کے ساتھ کام کرتے وقت، موثر اور محفوظ API انٹریکشنز کے لیے ان بہترین طریقوں پر عمل کریں:
// Using async/await with fetch async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const data = await response.json(); console.log(data); return data; } catch (error) { console.error('Fetch error:', error); } } // Using async/await with axios async function fetchDataWithAxios() { try { const response = await axios.get('https://api.example.com/data'); console.log(response.data); return response.data; } catch (error) { console.error('Axios error:', error); } }
async function fetchWithRetry(url, options = {}, retries = 3, backoff = 300) { try { const response = await fetch(url, options); return response; } catch (error) { if (retries <= 1) throw error; await new Promise(resolve => setTimeout(resolve, backoff)); return fetchWithRetry(url, options, retries - 1, backoff * 2); } }
// Create configurable API client with axios const apiClient = axios.create({ baseURL: 'https://api.example.com', timeout: 10000, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); // Add request interceptors apiClient.interceptors.request.use(config => { // Do something before request is sent const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => { return Promise.reject(error); }); // Add response interceptors apiClient.interceptors.response.use(response => { // Any status code within 2xx range return response; }, error => { // Handle 401 Unauthorized errors if (error.response && error.response.status === 401) { console.log('Unauthorized, please login again'); } return Promise.reject(error); }); // Use the API client apiClient.get('/users') .then(response => console.log(response.data)) .catch(error => console.error(error));
// Using Promise.all with fetch async function fetchMultipleResources() { try { const [users, products, orders] = await Promise.all([ fetch('https://api.example.com/users').then(res => res.json()), fetch('https://api.example.com/products').then(res => res.json()), fetch('https://api.example.com/orders').then(res => res.json()) ]); console.log({ users, products, orders }); return { users, products, orders }; } catch (error) { console.error('Error fetching data:', error); } } // Using axios.all for concurrent requests async function fetchMultipleResourcesWithAxios() { try { const [users, products, orders] = await axios.all([ axios.get('https://api.example.com/users'), axios.get('https://api.example.com/products'), axios.get('https://api.example.com/orders') ]); console.log({ users: users.data, products: products.data, orders: orders.data }); } catch (error) { console.error('Error fetching data:', error); } }
// Simple in-memory cache implementation const cache = new Map(); async function fetchWithCache(url, options = {}, ttl = 60000) { const cacheKey = `${url}-${JSON.stringify(options)}`; // Check cache const cachedItem = cache.get(cacheKey); if (cachedItem && Date.now() < cachedItem.expiry) { console.log('Using cached data'); return cachedItem.data; } // If no cache or expired, make the request const response = await fetch(url, options); const data = await response.json(); // Update cache cache.set(cacheKey, { data, expiry: Date.now() + ttl }); return data; }