I-convert ang mga curl command sa JavaScript code - Gumawa ng ready-to-use na JavaScript fetch/axios code para sa mga API request
// 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));
Narito ang ilang karaniwang curl command na maaari mong i-convert sa JavaScript code:
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
Ang JavaScript ay nag-aalok ng maraming paraan para gumawa ng mga HTTP request. Narito ang mga karaniwang pattern gamit ang parehong Fetch API at 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); } });
Kopyahin ang iyong curl command → I-paste sa input box → Kunin ang JavaScript code agad
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); } });
S: Habang ang curl ay isang command-line tool para sa paggawa ng mga HTTP request, ang fetch API ng JavaScript ay nagbibigay ng programmatic interface sa loob ng mga web browser at Node.js. Ang Fetch ay gumagamit ng Promise para sa pag-handle ng asynchronous operation, samantalang ang curl ay nag-e-execute nang synchronously. Bukod dito, ang fetch ay awtomatikong sumusunod sa mga redirect at hindi nagpapadala ng mga cookie by default, habang ginagawa ng curl ang pareho maliban kung na-configure.
S: Ang Fetch ay built-in sa mga modernong browser ngunit nangangailangan ng mas maraming boilerplate para sa error handling at hindi awtomatikong nag-pa-parse ng mga JSON response. Ang Axios ay isang library na nagbibigay ng mas feature-rich na API na may automatic JSON parsing, mas mahusay na error handling, request/response interception, at built-in request cancellation. Ang Axios ay gumagana rin nang consistent sa mga browser at Node.js environment.
S: Ang mga CORS (Cross-Origin Resource Sharing) restriction ay nalalapat sa browser-based JavaScript ngunit hindi sa curl. Kapag nag-co-convert ng mga curl command sa JavaScript, maaari kang makatagpo ng mga CORS error kung ang server ay hindi nagsasama ng angkop na CORS header. Ang mga solusyon ay kinabibilangan ng: paggamit ng CORS proxy, paghiling sa may-ari ng API na i-enable ang mga CORS header, pag-implement ng server-side proxy sa iyong application, o paggamit ng Node.js para sa mga request na hindi tumatakbo sa browser.
S: Sa browser-based JavaScript, hindi mo maaaring i-bypass ang SSL certificate validation dahil ito ay isang security feature na ipinapatupad ng mga browser. Sa Node.js, maaari mong itakda ang rejectUnauthorized: false
option sa HTTPS agent configuration. Gayunpaman, ito ay lubos na hindi inirerekomenda sa production dahil nakokompromiso nito ang seguridad. Halimbawa: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});
S: Para hawakan ang mga file upload sa JavaScript na katulad ng -F flag ng curl, gamitin ang FormData API. Halimbawa: const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData });
Ang approach na ito ay gumagana sa parehong fetch at axios.
S: Sa fetch API, gumamit ng AbortController kasama ang setTimeout: const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal });
Sa axios, gamitin ang timeout option: axios.get(url, { timeout: 5000 });
Ang parehong approach ay nagbibigay-daan sa iyo na kontrolin kung gaano katagal maghihintay bago i-cancel ang isang request.
S: Habang ang curl ay nag-aalok ng -v/--verbose flag para sa detalyadong request/response information, ang JavaScript ay nagbibigay ng iba't ibang debugging tool. Sa mga browser, gamitin ang Network tab sa DevTools para suriin ang mga request, header, payload, at timing. Para sa programmatic debugging, maaari kang gumamit ng axios interceptor para i-log ang mga request/response detail o mag-implement ng custom logging sa fetch. Sa Node.js, maaari kang gumamit ng mga library tulad ng 'http-debug' o itakda ang NODE_DEBUG=http environment variable.
Ang pag-unawa sa mga curl command ay mahalaga para sa epektibong API testing gamit ang JavaScript. Narito ang isang mabilis na reference ng mga karaniwang curl option na sinusuportahan ng aming converter:
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 connectionAng aming JavaScript converter ay nagha-handle ng mga kumplikadong curl command kabilang ang maraming header, authentication, data payload, at iba't ibang option. I-paste lang ang iyong curl command at makakuha ng malinis, modernong JavaScript code gamit ang Fetch API o Axios.
Kapag gumagamit ng Fetch API o Axios ng JavaScript, sundin ang mga best practice na ito para sa mahusay at secure na API interaction:
// 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; }