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; }