Curl komutlarını JavaScript koduna dönüştürün - API istekleri için kullanıma hazır JavaScript fetch/axios kodu oluşturun
// 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));
İşte JavaScript koduna dönüştürebileceğiniz bazı yaygın curl komutları:
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 istekleri yapmak için birden fazla yol sunar. İşte hem Fetch API hem de Axios kullanarak yaygın kalıplar:
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 komutunuzu kopyalayın → Giriş kutusuna yapıştırın → Anında JavaScript kodu alın
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); } });
C: Curl HTTP istekleri yapmak için bir komut satırı aracı iken, JavaScript'in fetch API'si web tarayıcıları ve Node.js içinde programatik bir arayüz sağlar. Fetch, asenkron işlemleri işlemek için Promise'leri kullanırken, curl senkron olarak çalışır. Ayrıca, fetch varsayılan olarak yönlendirmeleri otomatik olarak takip eder ve çerezleri göndermezken, curl başka türlü yapılandırılmadıkça her ikisini de yapar.
C: Fetch modern tarayıcılara yerleşiktir ancak hata işleme için daha fazla şablon kodu gerektirir ve JSON yanıtlarını otomatik olarak ayrıştırmaz. Axios, otomatik JSON ayrıştırma, daha iyi hata işleme, istek/yanıt araya girme ve yerleşik istek iptali ile daha fazla özellik sunan bir kütüphanedir. Axios ayrıca tarayıcılar ve Node.js ortamlarında tutarlı bir şekilde çalışır.
C: CORS (Çapraz Kaynak Paylaşımı) kısıtlamaları, tarayıcı tabanlı JavaScript için geçerlidir ancak curl için geçerli değildir. Curl komutlarını JavaScript'e dönüştürürken, sunucu uygun CORS başlıklarını içermiyorsa CORS hataları ile karşılaşabilirsiniz. Çözümler şunları içerir: CORS proxy kullanmak, API sahibinden CORS başlıklarını etkinleştirmesini istemek, uygulamanızda sunucu taraflı bir proxy uygulamak veya tarayıcıda çalışmayan istekler için Node.js kullanmak.
C: Tarayıcı tabanlı JavaScript'te, SSL sertifika doğrulamasını atlayamazsınız çünkü bu, tarayıcılar tarafından uygulanan bir güvenlik özelliğidir. Node.js'de, HTTPS ajanı yapılandırmasında rejectUnauthorized: false
seçeneğini ayarlayabilirsiniz. Ancak, güvenliği tehlikeye attığı için bu, üretimde kesinlikle önerilmez. Örnek: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});
C: JavaScript'te curl'un -F bayrağına benzer dosya yüklemelerini işlemek için FormData API'sini kullanın. Örneğin: const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData });
Bu yaklaşım hem fetch hem de axios ile çalışır.
C: Fetch API ile, setTimeout ile AbortController kullanın: const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal });
Axios ile, timeout seçeneğini kullanın: axios.get(url, { timeout: 5000 });
Her iki yaklaşım da bir isteği iptal etmeden önce ne kadar bekleyeceğinizi kontrol etmenizi sağlar.
C: Curl ayrıntılı istek/yanıt bilgileri için -v/--verbose bayrağını sunarken, JavaScript farklı hata ayıklama araçları sağlar. Tarayıcılarda, istekleri, başlıkları, yükleri ve zamanlamayı incelemek için DevTools'un Ağ sekmesini kullanın. Programatik hata ayıklama için, istek/yanıt ayrıntılarını günlüğe kaydetmek için axios interceptor'larını kullanabilir veya fetch ile özel günlükleme uygulayabilirsiniz. Node.js'de, 'http-debug' gibi kütüphaneleri kullanabilir veya NODE_DEBUG=http ortam değişkenini ayarlayabilirsiniz.
Curl komutlarını anlamak, JavaScript ile etkili API testi için gereklidir. İşte dönüştürücümüzün desteklediği yaygın curl seçeneklerinin hızlı bir referansı:
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 connectionJavaScript dönüştürücümüz, birden fazla başlık, kimlik doğrulama, veri yükleri ve çeşitli seçenekler dahil karmaşık curl komutlarını işler. Curl komutunuzu yapıştırmanız yeterlidir ve Fetch API veya Axios kullanarak temiz, modern JavaScript kodu alın.
JavaScript'in Fetch API'si veya Axios ile çalışırken, verimli ve güvenli API etkileşimleri için bu en iyi uygulamaları izleyin:
// 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; }