Tukar arahan curl kepada kod JavaScript - Jana kod JavaScript fetch/axios sedia untuk digunakan untuk permintaan API
// 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));
Berikut adalah beberapa arahan curl biasa yang boleh anda tukar kepada kod 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 menawarkan pelbagai cara untuk membuat permintaan HTTP. Berikut adalah corak biasa menggunakan kedua-dua API Fetch dan 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); } });
Salin arahan curl anda → Tampal ke dalam kotak input → Dapatkan kod JavaScript dengan segera
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); } });
J: Walaupun curl adalah alat baris arahan untuk membuat permintaan HTTP, API fetch JavaScript menyediakan antara muka programatik dalam pelayar web dan Node.js. Fetch menggunakan Promises untuk mengendalikan operasi tak segerak, manakala curl dilaksanakan secara segerak. Selain itu, fetch mengikuti pengalihan secara automatik dan tidak menghantar kuki secara lalai, manakala curl melakukan kedua-duanya melainkan dikonfigurasi sebaliknya.
J: Fetch dibina dalam pelayar moden tetapi memerlukan lebih banyak boilerplate untuk pengendalian ralat dan tidak mengurai respons JSON secara automatik. Axios adalah pustaka yang menyediakan API yang lebih kaya dengan ciri dengan penguraian JSON automatik, pengendalian ralat yang lebih baik, pintasan permintaan/respons, dan pembatalan permintaan bawaan. Axios juga berfungsi secara konsisten merentasi persekitaran pelayar dan Node.js.
J: Sekatan CORS (Cross-Origin Resource Sharing) terpakai kepada JavaScript berasaskan pelayar tetapi tidak kepada curl. Apabila menukar arahan curl kepada JavaScript, anda mungkin menghadapi ralat CORS jika pelayan tidak menyertakan pengepala CORS yang sesuai. Penyelesaian termasuk: menggunakan proksi CORS, meminta pemilik API untuk mengaktifkan pengepala CORS, melaksanakan proksi sisi pelayan dalam aplikasi anda, atau menggunakan Node.js untuk permintaan yang tidak berjalan dalam pelayar.
J: Dalam JavaScript berasaskan pelayar, anda tidak boleh memintas pengesahan sijil SSL kerana ia adalah ciri keselamatan yang dikuatkuasakan oleh pelayar. Dalam Node.js, anda boleh menetapkan pilihan rejectUnauthorized: false
dalam konfigurasi agen HTTPS. Walau bagaimanapun, ini sangat tidak digalakkan dalam produksi kerana ia menjejaskan keselamatan. Contoh: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});
J: Untuk mengendalikan muat naik fail dalam JavaScript serupa dengan bendera -F curl, gunakan API FormData. Contohnya: const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData });
Pendekatan ini berfungsi dengan kedua-dua fetch dan axios.
J: Dengan API fetch, gunakan AbortController dengan setTimeout: const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal });
Dengan axios, gunakan pilihan timeout: axios.get(url, { timeout: 5000 });
Kedua-dua pendekatan membolehkan anda mengawal berapa lama untuk menunggu sebelum membatalkan permintaan.
J: Walaupun curl menawarkan bendera -v/--verbose untuk maklumat permintaan/respons terperinci, JavaScript menyediakan alat penyahpepijatan yang berbeza. Dalam pelayar, gunakan tab Rangkaian dalam DevTools untuk memeriksa permintaan, pengepala, muatan, dan pemasaan. Untuk penyahpepijatan programatik, anda boleh menggunakan pintasan axios untuk mencatat butiran permintaan/respons atau melaksanakan pencatatan tersuai dengan fetch. Dalam Node.js, anda boleh menggunakan pustaka seperti 'http-debug' atau menetapkan pembolehubah persekitaran NODE_DEBUG=http.
Memahami arahan curl adalah penting untuk ujian API yang berkesan dengan JavaScript. Berikut adalah rujukan pantas pilihan curl biasa yang disokong oleh penukar kami:
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 connectionPenukar JavaScript kami mengendalikan arahan curl kompleks termasuk pelbagai pengepala, pengesahan, muatan data, dan pelbagai pilihan. Hanya tampal arahan curl anda dan dapatkan kod JavaScript yang bersih dan moden menggunakan sama ada API Fetch atau Axios.
Apabila bekerja dengan API Fetch JavaScript atau Axios, ikuti amalan terbaik ini untuk interaksi API yang cekap dan selamat:
// 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; }