Beranda BlogPengikisan web Axios vs. ambil() untuk membuat permintaan HTTP

Axios vs. ambil() untuk membuat permintaan HTTP

oleh Kadek

HyperText Transfer Protocol (HTTP) dan varian HTTPS yang lebih aman digunakan untuk mentransfer informasi dan dokumen. Ini mendefinisikan bagaimana pesan diformat dan dikirim dan tindakan apa yang harus diambil oleh server web dan browser sebagai respons terhadap berbagai perintah. Permintaan HTTP sangat penting untuk pengembangan web, baik saat berinteraksi dengan server atau bekerja dengan API. Memahami permintaan HTTP sangat penting ketika bekerja dengan teknologi web apa pun.

Dalam JavaScript, serta di NodeJS (lingkungan runtime JavaScript), ada dua perpustakaan populer untuk bekerja dengan permintaan HTTP: Fetch API dan Axios. Pilihan di antara mereka masih kontroversial, karena masing-masing memiliki pendukungnya sendiri. Pada artikel ini, kami membandingkan kedua metode ini untuk mengetahui kelebihan dan kekurangannya serta membantu Anda memilih metode yang paling sesuai untuk proyek Anda.

Memahami permintaan HTTP

Sebelum kita mempelajari Fetch API dan Axios, mari kita lihat sekilas permintaan HTTP: apa itu, jenisnya, dan komponen apa yang dimilikinya. Permintaan HTTP adalah pesan yang dikirim ke server untuk mengakses sumber daya. Permintaan menentukan metode, URL, header, dan isi (jika ada). Ada banyak metode permintaan HTTP:

  1. MENERIMA: fetch() Minta data dari sumber daya tertentu. Ini seharusnya tidak berdampak apa pun pada data.
  2. POS: Mengirim data untuk diproses ke sumber daya tertentu, sering kali mengakibatkan perubahan status atau efek samping pada server.
  3. MENGATUR: Mengganti semua representasi sumber daya target saat ini dengan konten yang diunggah.
  4. MENGHAPUS: Menghapus sumber daya tertentu.
  5. KEPALA: Mirip dengan GET, tetapi hanya meminta header (bukan isi sumber daya yang ditentukan).
  6. tambalan: Menerapkan sebagian perubahan pada sumber daya.

Setelah Anda menentukan metode permintaan, tentukan URL sumber daya. Selanjutnya, buat permintaan sebenarnya, yang terdiri dari header dan isi.

Header permintaan memberikan informasi penting kepada server, seperti: B. tipe konten yang dapat diterima (header Terima), tipe konten terkirim (header Tipe Konten) dan data autentikasi. Badan permintaan digunakan untuk mengirim data dalam permintaan tertentu seperti POST atau PUT. Ini bisa berupa formulir, JSON, XML, atau format lain apa pun yang diharapkan server.

Respons HTTP terdiri dari baris status (termasuk kode status HTTP dan deskripsi singkat), header, dan terkadang teks. Kode status memberikan informasi tentang hasil permintaan. Kode status umum meliputi:

  1. 200 oke: Permintaan berhasil.
  2. 301 Dipindahkan secara permanen: Sumber daya telah dipindahkan secara permanen ke URL baru.
  3. 400 Permintaan tidak valid: Permintaan tidak dapat diproses karena sintaksis yang salah.
  4. 401 tidak diizinkan: Otentikasi diperlukan untuk mengakses sumber daya.
  5. 404 tidak ditemukan: Sumber daya yang diminta tidak dapat ditemukan.
  6. 500 Internal Server Error: Pesan kesalahan umum ketika server mengalami kondisi yang tidak terduga.

Saat membuat permintaan HTTP, ada baiknya untuk mempertimbangkan tidak hanya kemungkinan respons yang berhasil, namun juga potensi kesalahan.

Sekarang setelah kita memahami permintaan HTTP, jenisnya, komponennya, dan respons yang diharapkan, mari beralih ke topik utama artikel ini dan membandingkan dua alat NodeJS yang populer untuk bekerja dengannya.

Ikhtisar singkat tentang Ambil dan Axios

Untuk membandingkan alat-alat ini secara efektif, pertama-tama kita harus memahami definisi dan tujuannya. Dengan memahami perbedaan inti antara Fetch API dan Axios, kami dapat mengevaluasi dengan lebih baik kekuatan dan kelemahan masing-masing untuk kasus penggunaan yang berbeda.

Apa itu Ambil API?

Fetch API adalah antarmuka JavaScript asli untuk mengirimkan permintaan HTTP. Ini adalah bagian dari Window dan Worker API dan menyediakan global fetch() Metode pengiriman permintaan. API ini dikembangkan untuk menggantikan model sebelumnya XMLHttpRequest Pendekatan yang menyediakan alat yang lebih sederhana dan kuat untuk menangani permintaan jaringan.

Permintaan GET sederhana dengan fetch():

fetch('https://example.com')
  .then(response => {
    if (!response.ok) {
        throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('There was a problem with your fetch operation:', error));

Fetch API bukan fitur bawaan di Node.js karena Node.js tidak memiliki API asli untuk bekerja dengan permintaan HTML atau HTTP seperti yang dimiliki browser. Namun, Anda dapat meniru perilaku penggunaan modul eksternal seperti pengambilan simpul fetch() di lingkungan Node.js. Setelah pengambilan simpul diinstal, gunakan fetch() di Node.js terlihat sangat mirip dengan menggunakannya di browser.

const fetch = require('node-fetch');

fetch('https://example.com')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Sisa artikel ini berisi contoh khusus dalam konteks JavaScript.

Apa itu Aksio?

Axios adalah perpustakaan JavaScript populer untuk mengirimkan permintaan HTTP dari browser dan Node.js. Ini menyediakan API yang nyaman untuk mengirim permintaan ke server dan memproses respons. Dibandingkan dengan fetch()Axios menambahkan beberapa fitur berguna dan menyederhanakan beberapa aspek permintaan, seperti: B. penguraian otomatis respons JSON dan perlindungan XSRF.

Ini sering digunakan bersama dengan perpustakaan Cheerio untuk web scraping. Cheerio adalah implementasi inti jQuery yang cepat, fleksibel, dan ringan yang dirancang khusus untuk server. Ini memungkinkan Anda memilih dan mengekstrak data dari dokumen HTML.

Sebelum kita mendalami perbandingan fitur secara mendetail, mari kita lihat penggunaan Axios di browser dan lingkungan Node.js. Penggunaannya sangat mirip dalam kedua kasus, dengan sedikit perbedaan karena lingkungan eksekusi.

Untuk menggunakan Axios di browser, tambahkan tag skrip dari CDN ke file HTML Anda. Anda kemudian dapat menggunakan objek Axios untuk membuat permintaan GET.

axios.get('https://example.com')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  })
  .finally(function () {
  });

Untuk menggunakan Axios di Node.js, Anda harus menginstal paketnya terlebih dahulu npm atau yarn. Kalau tidak, tidak banyak perbedaan:

const axios = require('axios');

axios.get('https://example.com')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  })
  .finally(function () {
  });

Axios mudah digunakan baik di browser maupun NodeJS, dengan sedikit atau tanpa perbedaan kode.

Perbedaan dan pertimbangan utama

Sekarang kita telah membahas apa itu Axios dan Fetch API, mari kita bandingkan keduanya secara detail berdasarkan berbagai kriteria. Ini akan membantu kita mengidentifikasi kekuatan dan kelemahan mereka. Namun sebelum kita melakukannya, mari kita sajikan tabel singkat beserta aspek utamanya:

parameter

Membawa

aksio

instalasi

Terintegrasi ke sebagian besar browser modern

Memerlukan instalasi melalui NPM/Yarn

Kompatibilitas peramban

Didukung oleh sebagian besar browser modern, tetapi memerlukan polyfill untuk IE

Didukung oleh semua browser modern dan IE

Penanganan JSON

Memerlukan pemanggilan .json() sebagai respons

Secara otomatis mengonversi JSON ke/dari objek

Penanganan kesalahan

Tidak menolak janji untuk respons kesalahan HTTP

Secara otomatis menolak janji untuk respons kesalahan HTTP

Waktu istirahat

Tidak ada dukungan bawaan

Mendukung batas waktu standar

Unduh kemajuan

Tidak didukung secara asli

Mendukung pelacakan kemajuan unduhan

CORS (Berbagi Sumber Daya Lintas Asal)

Mendukung

Mendukung

Perlindungan CSRF/XSRF

Tidak ada dukungan bawaan

Dukungan terintegrasi

Pencegat

Tidak didukung

Mendukung

Konfigurasi bawaan

Dukungan terbatas

Pengaturan global yang mudah dikonfigurasi

Penggunaan Node.js

Memerlukan perpustakaan tambahan untuk Node.js

Didukung segera

Ukuran perpustakaan

Lebih kecil (terintegrasi ke dalam browser secara default)

Lebih besar (karena fitur tambahan)

Janji dan async/menunggu

Mudah digunakan dengan janji dan async/menunggu

Memerlukan rangkaian dengan .then() atau menggunakan async/menunggu

Metode terpadu

Langsung menggunakan metode bawaan browser (header, permintaan, respons)

Memerlukan axios.get(), axios.post(), dll.

Pengaturan global

Menggunakan pengaturan global browser (misalnya header, caching)

Pengaturan global yang mudah dikonfigurasi

Kenyamanan di browser

API browser asli yang menyederhanakan proses debug di DevTools

Pemetaan sumber mungkin diperlukan untuk proses debug di DevTools

teknologi

Standar ES6+

Perpustakaan, bukan bagian dari standar JavaScript

Seperti yang Anda lihat, masing-masing alat memiliki kelebihan dan kekurangan, sehingga membuat pemilihan alat yang tepat menjadi sedikit sulit. Untuk menentukan alat terbaik, kita akan melihat lebih dekat setiap alat dan memberikan contoh kode yang relevan untuk situasi berbeda.

Sintaks dan objek respons

Fetch API adalah fungsi JavaScript asli yang menghilangkan kebutuhan akan perpustakaan eksternal, menjadikannya pilihan yang nyaman. Meskipun kami telah membahas permintaan GET, permintaan POST akan lebih menggambarkan perbedaan antara Fetch API dan Axios. Seperti inilah tampilan permintaan POST fetch():

fetch('https://example.com', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    key1: 'value1',
    key2: 'value2',
  }),
})
  .then(response => {
    if (!response.ok) {
        throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('There was a problem with your fetch operation:', error));

Di sisi lain, Axios adalah perpustakaan eksternal yang menyediakan sintaksis yang lebih tepat dan nyaman. Oleh karena itu, kueri yang sama yang menggunakannya terlihat lebih sederhana dan lebih pendek:

axios.post('https://example.com', {
    key1: 'value1',
    key2: 'value2',
  })
  .then(response => console.log(response.data))
  .catch(error => console.error('There was a problem with your axios operation:', error));

Seperti yang ditunjukkan dalam contoh, Axios dapat membantu mengurangi jumlah kode dan meningkatkan keterbacaan. Oleh karena itu, banyak pengembang lebih menyukainya karena keterbacaannya dan kemudahan penggunaannya.

Pertimbangan kinerja

Perbandingan kinerja Axios dan Fetch API bergantung pada kasus penggunaan spesifik dan persyaratan proyek. Umumnya, fetch() menawarkan keunggulan dalam hal desain ringan dan integrasi dengan fitur browser asli, sementara Axios menawarkan kemudahan tambahan yang dapat bermanfaat dalam skenario tertentu.

Axios menimbulkan beberapa overhead karena fungsionalitas tambahannya, membuatnya lebih berat jika dibandingkan fetch(). Selain itu, pencegat mungkin dikenakan biaya tambahan dalam memproses permintaan dan respons, terutama ketika pencegat dalam jumlah besar dikerahkan. Namun, Axios menyediakan fungsionalitas cache permintaan yang dapat meningkatkan kinerja dalam skenario dengan permintaan berulang.

Di sisi lain, Fetch API lebih ringan dan terintegrasi secara native ke dalam browser, sehingga mengurangi jumlah kode yang diunduh. Selain itu, ia menggunakan janji untuk memastikan sintaksis yang bersih dan praktis serta kinerja yang baik dalam skenario asinkron. Selain itu, Fetch API terintegrasi secara default dengan fitur browser asli seperti Service Worker, yang sangat penting bagi kinerja aplikasi web modern.

Oleh karena itu, jika Anda perlu membuat permintaan HTTP sederhana tanpa fungsi tambahan apa pun, fetch() mungkin pilihan yang lebih disukai karena bobotnya yang ringan. Namun, jika fitur tambahan seperti interseptor dan caching diperlukan atau Anda perlu membuat permintaan HTTP di Node.js di mana fetch() bukan bagian dari perpustakaan standar, maka Axios akan menjadi pilihan yang lebih baik.

Batas waktu respons habis

Sayangnya, Fetch API tidak menyediakan cara langsung untuk menyetel batas waktu. Namun, Anda dapat menggunakan AbortController Dan AbortSignal Mekanisme pembatalan permintaan secara manual setelah jangka waktu tertentu.

const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000);

fetch('https://example.com/', { signal: controller.signal })
  .then(function (response) {
    clearTimeout(timeoutId);
    return response.json();
  })
  .then(function (data) {
    console.log(data);
  })
  .catch(function (error) {
    if (error.name === 'AbortError') {
      console.log('Request canceled due to timeout');
    } else {
      console.log(error);
    }
  });

Axios memungkinkan Anda menyetel batas waktu permintaan menggunakan opsi batas waktu dalam konfigurasi permintaan. Opsi ini menentukan waktu maksimum (dalam milidetik) yang diperlukan untuk menyelesaikan suatu permintaan. Jika batas waktu terlampaui, permintaan dibatalkan dan janji ditolak.

axios.get('https://example.com', { timeout: 5000 })
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    if (axios.isCancel(error)) {
      console.log('Request canceled due to timeout');
    } else {
      console.log(error);
    }
  });

Kedua solusi menawarkan fungsionalitas serupa, namun Axios menawarkan cara yang lebih mudah dan nyaman untuk mengelola batas waktu permintaan.

Penanganan kesalahan

Fetch API menganggap kode status HTTP apa pun selain 200 (berhasil) sebagai kesalahan. Namun, hal ini tidak terjadi secara otomatis dan Anda perlu memeriksa status kode Anda untuk memecahkan masalah kesalahan secara manual. Selain itu, fetch() Tidak menangani kesalahan jaringan (misalnya tidak ada koneksi internet atau ketidakmampuan untuk terhubung). Untuk menangani kesalahan seperti itu, Anda harus menggunakan try-catch fetch() Panggilan.

try {
    const response = await fetch('https://example.com');
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Fetch error:', error);
  }

Axios secara otomatis memproses status HTTP dan memicu blok catch untuk semua respons dengan status HTTP buruk (kecuali 2xx). Ini menyederhanakan penanganan kesalahan dan memungkinkan Anda fokus pada kode Anda. Selain itu, Axios dengan mudah menangani kesalahan jaringan, seperti tidak tersambung atau tidak dapat tersambung.

axios.get('https://example.com')
  .then(response => console.log(response.data))
  .catch(error => {
    if (error.response) {
      console.error('Axios error! HTTP status:', error.response.status);
    } else if (error.request) {
      console.error('Axios error! Network issue:', error.message);
    } else {
      console.error('Axios error!', error.message);
    }
  });

Axios menyediakan mekanisme penanganan error yang lebih nyaman dan tepat sasaran, terutama terkait status HTTP. Sebaliknya, ini adalah fetch() memerlukan lebih banyak upaya manual, terutama jika terjadi kesalahan jaringan.

Unggah kemajuan

Memantau kemajuan pengunggahan file lebih mudah dan langsung dengan Axios dibandingkan dengan fetch(). Axios menyediakan parameter onUploadProgress yang diaktifkan secara otomatis saat kemajuan pengunggahan diperbarui. Hal ini mempermudah pemantauan kemajuan dan integrasi ke dalam kode Anda untuk menampilkan informasi unggahan.

const axios = require('axios');
const fs = require('fs');
const FormData = require('form-data');

const fileStream = fs.createReadStream('file.txt');
const formData = new FormData();
formData.append('file', fileStream);

axios.post('https://example.com/', formData, {
  headers: formData.getHeaders(),
  onUploadProgress: progressEvent => {
    console.log(`Uploaded ${progressEvent.loaded} bytes`);
  }
})
.then(response => {
  console.log('Upload successful');
})
.catch(error => {
  console.error('Upload failed:', error);
});

Melacak kemajuan pengunduhan dengan Fetch API lebih kompleks dan memerlukan integrasi lebih dalam ke aliran respons. Diperlukan ekstraksi informasi kemajuan secara manual dari aliran dan memprosesnya di pengendali yang sesuai.

const file = document.querySelector('input(type="file")').files(0);
const formData = new FormData();
formData.append('file', file);

fetch('https://example.com/', {
  method: 'POST',
  body: formData
}).then(response => {
  const reader = response.body.getReader();
  const contentLength = +response.headers.get('Content-Length');

  let loaded = 0;
  reader.read().then(function processResult(result) {
    if (result.done) {
      console.log('Upload completed');
      return;
    }

    loaded += result.value.length;
    console.log(`Uploaded ${loaded} of ${contentLength} bytes`);

    return reader.read().then(processResult);
  });
}).catch(error => {
  console.error('Upload failed:', error);
});

Jadi jika aplikasi Anda sangat bergantung pada unggahan file, Axios dapat membuat fungsi ini lebih mudah.

Kompatibilitas mundur

Fetch API didukung oleh sebagian besar browser modern, namun tidak oleh Internet Explorer dan versi lama browser lainnya. Polyfill diperlukan untuk memastikan kompatibilitas dengan browser lama.

Axios menawarkan kompatibilitas mundur yang lebih baik karena dapat digunakan di browser dan Node.js tanpa polyfill tambahan. Hal ini menjadikannya pilihan yang lebih disukai untuk proyek yang memerlukan dukungan untuk browser atau lingkungan lama.

Transformasi data JSON otomatis

Fetch API tidak secara otomatis mengurai respons JSON. Untuk mendapatkan data dalam format data JSON, Anda perlu memanggil .json() Metode untuk objek respons.

fetch('https://example.com/')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Axios menawarkan analisis data JSON otomatis. Data respons secara otomatis diekstraksi dari objek respons Axios dan dapat diakses melalui properti .data.

axios.get('https://example.com/')
  .then(response => console.log(response.data))
  .catch(error => console.error('Error:', error));

Namun, penting untuk dicatat bahwa Axios akan mencoba mengonversi respons ke JSON secara otomatis meskipun server mengembalikan data dalam format yang berbeda. Jika server mengembalikan data dalam format yang tidak dapat dikonversi ke JSON (misalnya teks biasa, HTML, atau XML), Axios menghasilkan kesalahan. Namun jika Anda mengetahui format respon terlebih dahulu dan ingin memprosesnya secara manual, Anda dapat menggunakan metode Axios lainnya, seperti: .text() atau .arrayBuffer()untuk mendapatkan data dalam format yang diinginkan.

Pencegat HTTP

Pencegat HTTP, dalam konteks permintaan HTTP, adalah mekanisme yang memungkinkan Anda mencegat dan memproses permintaan dan tanggapan sebelum dikirim atau setelah diterima. Ini adalah alat yang ampuh untuk:

  1. Tambahkan logika umum: Anda dapat menambahkan logika umum ke semua permintaan HTTP, seperti: B. Otentikasi, otorisasi atau logging.
  2. Penanganan kesalahan: Anda dapat menangani kesalahan secara terpusat dan memastikan pengalaman pengguna yang konsisten.
  3. Manipulasi data: Anda dapat mengedit data permintaan atau respons sebelum dikirim atau diterima.
  4. Operasi lainnya: Anda dapat melakukan operasi lain seperti caching atau masuk pada permintaan dan respons HTTP.

Fetch API di browser menyediakan objek Permintaan yang dapat digunakan untuk membuat permintaan. Namun, itu benar fetch() tidak menyediakan mekanisme bawaan untuk mencegat permintaan HTTP. Ini berarti Anda harus secara eksplisit menangani objek permintaan dan respons dalam kode Anda untuk memanipulasi permintaan dan respons.

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Axios menyediakan mekanisme pencegat HTTP bawaan. Anda dapat menambahkan interseptor untuk permintaan dan tanggapan. Hal ini mempermudah penambahan logika umum atau transformasi data untuk semua persyaratan.

const axios = require('axios');

axios.interceptors.request.use(config => {
  console.log('Request Interceptor:', config);
  return config;
}, error => {
  return Promise.reject(error);
});

axios.interceptors.response.use(response => {
  console.log('Response Interceptor:', response);
  return response;
}, error => {
  return Promise.reject(error);
});

axios.get('https://example.com/')
  .then(response => console.log(response.data))
  .catch(error => console.error('Error:', error));

Axios memudahkan penambahan logika umum ke semua permintaan. Hal ini menghilangkan kebutuhan untuk memproses permintaan dan tanggapan secara eksplisit, menjadikannya pilihan yang baik bagi mereka yang lebih suka menggunakan pencegat yang lengkap.

Unduh kemajuan

Fetch API dan Axios menawarkan pendekatan berbeda untuk melacak kemajuan pengunduhan. fetch() menyediakan objek Respon dengan a body.getReader() Metode. Metode ini mengembalikan a ReadableStream Objek yang memungkinkan data dibaca dalam beberapa bagian sehingga Anda dapat melacak kemajuannya.

fetch('https://example.com/')
  .then(response => {
    const contentLength = response.headers.get('Content-Length');
    const total = parseInt(contentLength, 10);
    let loaded = 0;
    const reader = response.body.getReader();

    function read() {
      return reader.read().then(({ done, value }) => {
        if (done) {
          console.log('Download complete');
          return;
        }
        loaded += value.byteLength;
        console.log(`Progress: ${(loaded / total) * 100}%`);
        return read();
      });
    }

    return read();
  })
  .catch(error => console.error('Download error:', error));

Axios, di sisi lain, menawarkan satu hal onDownloadProgress Fungsi panggilan balik untuk melacak kemajuan pengunduhan. Fungsi ini dipanggil secara berkala dengan informasi tentang jumlah total byte yang diunduh dan jumlah total byte yang diharapkan akan diunduh.

const axios = require('axios');
const url="https://example.com/";

axios({
  method: 'get',
  url: url,
  responseType: 'stream',
  onDownloadProgress: progressEvent => {
    const total = progressEvent.lengthComputable ? progressEvent.total : -1;
    const loaded = progressEvent.loaded;
    if (total !== -1) {
      console.log(`Progress: ${(loaded / total) * 100}%`);
    }
  },
})
  .then(response => {
    console.log('Download complete');
  })
  .catch(error => console.error('Download error:', error));

Pendekatan mana yang Anda gunakan bergantung pada kebutuhan spesifik Anda. Jika Anda perlu melacak kemajuan pengunduhan dengan cermat, Anda harus menggunakan ini body.getReader() Metode. Namun, jika Anda hanya memerlukan indikasi kemajuan secara umum, inilah saatnya onDownloadProgress Fungsi panggilan balik adalah opsi yang lebih sederhana.

Permintaan serentak

Fetch API dan Axios mendukung permintaan bersamaan, namun ada beberapa perbedaan dalam penggunaan dan fiturnya. Fetch API menyediakan mekanisme dasar untuk mengeksekusi permintaan secara bersamaan promise.all.

const urls = ('https://example.com/data1', 'https://example.com/data2');

const requests = urls.map(url => fetch(url));

Promise.all(requests)
  .then(responses => Promise.all(responses.map(response => response.json())))
  .then(data => console.log(data))
  .catch(error => console.error(error));

Axios menawarkan itu axios.all Metode untuk membuat permintaan pada saat yang sama dan axios.spread untuk mendistribusikan data ke jawaban:

const axios = require('axios');

const urls = ('https://api.example.com/data1', 'https://api.example.com/data2');

const requests = urls.map(url => axios.get(url));

axios.all(requests)
  .then(axios.spread((...responses) => {
    const data = responses.map(response => response.data);
    console.log(data);
  }))
  .catch(error => console.error(error));

Jika permintaan serentak merupakan pertimbangan penting bagi Anda dan Anda memerlukan sintaksis yang lebih nyaman, Axios mungkin merupakan pilihan yang lebih baik.

Berurusan dengan CORS

Fetch API adalah bagian standar dari JavaScript browser, yang nyaman tetapi memerlukan pengelolaan permintaan berbagi sumber daya lintas asal (CORS) yang lebih eksplisit. Di sisi lain, Axios menawarkan alat yang lebih nyaman untuk bekerja dengan CORS, yang secara otomatis memproses header dan menyediakan opsi untuk konfigurasi tambahan.

Dukungan dan popularitas komunitas

Itu fetch() adalah standar yang dibangun pada browser modern, jadi dukungan dan pertanyaan biasanya didiskusikan dalam komunitas pengembangan web. Selain itu, dokumentasi Fetch API sangat luas dan disediakan oleh Mozilla Developer Network (MDN), menjadikannya sumber informasi yang dapat diandalkan. Namun, beberapa masalah dan kerentanan yang ditemui pengguna diabaikan dalam waktu lama atau tidak diperbaiki.

Di sisi lain, Axios memiliki repositori yang aktif dan terus diperbarui di Github serta komunitas pengguna dan pengembang yang besar. Ada banyak diskusi dan pertanyaan di platform seperti Stack Overflow. Ini berarti bahwa masalah dan kerentanan yang ditemukan dapat diselesaikan dengan lebih cepat.

Memilih antara Ambil dan Axios

Sekarang setelah kita melihat berbagai opsi dan fitur Axios dan Fetch API, kita dapat mendiskusikan alat mana yang lebih baik untuk kasus tertentu. Namun, perlu dicatat bahwa tidak ada jawaban universal terhadap pertanyaan alat mana yang lebih baik, karena hal ini bergantung pada banyak faktor, termasuk tujuan proyek dan keterampilan pemrogram.

Kapan Fetch sebaiknya digunakan?

Fetch API menyediakan cara yang nyaman dan mudah untuk mengeksekusi permintaan HTTP di browser modern. Kesederhanaan dan penggunaan janji menjadikannya pilihan utama untuk permintaan sederhana. Namun, beberapa keterbatasan, seperti kurangnya dukungan pada browser lama dan beberapa kekurangan penanganan kesalahan, mungkin memerlukan penggunaan solusi tambahan atau pustaka alternatif dalam skenario yang lebih kompleks.

Namun jika keterbatasan tersebut fetch() Jika ini bukan masalah untuk kasus penggunaan Anda atau Anda dapat mengatasinya, lebih baik menggunakannya karena lebih dapat diandalkan, sudah terpasang di browser, dan berdampak lebih kecil pada kinerja.

Kapan menggunakan Axios

Jika Anda menggunakan NodeJS dan membutuhkan lebih banyak fungsi fetch(), atau jika Anda kesulitan menggunakannya, Axios adalah pilihan yang lebih baik. Ini juga merupakan pilihan yang baik untuk pemula karena menawarkan lebih banyak fungsi dan membuat pengkodean lebih mudah.

Kesimpulan dan temuan

Axios dan Fetch API adalah pustaka permintaan HTTP populer untuk JavaScript. Keduanya mempunyai kelebihan dan kekurangan masing-masing, sehingga sulit untuk mengatakan secara pasti mana yang lebih baik. Pilihan terbaik untuk Anda bergantung pada kebutuhan spesifik proyek Anda, preferensi pengembangan, dan fitur yang diperlukan. Singkatnya, jika Anda baru mengenal JavaScript, mulailah dengan Axios karena kesederhanaannya. Untuk kontrol dan kinerja lebih lanjut, pertimbangkan ini fetch() setelah Anda lebih akrab dengan bahasa tersebut. Pilihan lainnya adalah menggunakan keduanya untuk tugas yang berbeda.

Axios menyediakan API yang nyaman untuk membuat permintaan HTTP dan memproses respons, termasuk dukungan Promise, menjadikannya pilihan populer di kalangan pengembang untuk bekerja dengan HTTP dalam JavaScript. Fetch API awalnya dirancang untuk digunakan di browser, tetapi juga dapat digunakan di lingkungan lain seperti Node.js menggunakan polyfill atau perpustakaan eksternal. Ini lebih mudah, tetapi juga lebih rumit.

Jadi jika Anda membutuhkan kesederhanaan dan hanya menggunakan fitur HTTP dasar, fetch() mungkin pilihan yang lebih baik. Namun, untuk skenario yang lebih kompleks yang memerlukan fitur seperti batas waktu, transformasi data otomatis, dan penanganan kesalahan yang lebih baik, Axios menawarkan fungsionalitas yang lebih kaya.

Pos terkait

Tinggalkan Komentar