Axios ve Fetch arasındaki fark nedir?


Yanıtlar:


164

Getirme ve Axios işlevsellik bakımından çok benzer, ama daha geriye dönük uyumluluk için Axios daha iyi çalışması gibi görünüyor (getirme örneğin IE 11 iş değil, kontrol Bu yayını )

Ayrıca, JSON istekleriyle çalışıyorsanız, aşağıdakilerle karşılaştığım bazı farklılıklar vardır.

JSON yayın isteğini getir

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            body: JSON.stringify({
                property_one: value_one,
                property_two: value_two
            })
        };
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
    let data = await response.json();
    // do something with data
}

Axios JSON yayın isteği

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            url: url,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            data: {
                property_one: value_one,
                property_two: value_two
            }
        };
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
    let data = await response.data;
    // do something with data
}

Yani:

  • 'S Getirme vücudun = AXIOS' verilerini
  • Getirme gövdesi dize edilmelidir , Axios'un verileri nesneyi içerir
  • Getirme hiçbir URL var istek nesnesinde, Axios URL var isteği nesnesinde
  • Getirme isteği işlevi parametre olarak url'yi içerir , Axios istek işlevi ise parametre olarak url'yi içermez .
  • Talebidir Fetch Tamam yanıt nesnesi içerdiğinde Tamam özelliği , Axios talebidir Tamam olduğunda durum 200 ve statusText 'Tamam' olduğunu
  • Json nesnesi yanıtını almak için: fetch içinde yanıt nesnesindeki json () işlevini çağırın, Axios'ta yanıt nesnesinin data özelliğini alın .

Bu yardımcı olur umarım.


İşte daha fazla soru. ResponseOk doğruysa, status.deta yanıtında durumu kontrol etmemiz gerekir mi? teşekkürler
Yang Wang

1
Axios request is ok when status is 200 and statusText is 'OK' 2xx aralığındaki 201 veya 204 gibi diğer httpStatus'lara ne dersiniz?
leonbloy

46

Bunlar HTTP istek kitaplıklarıdır ...

Sonunda aynı şüphe ile karşılaşıyorum, ancak bu yazıdaki tablo beni götürüyor isomorphic-fetch. Hangi fetchNodeJS ile çalışır.

http://andrewhfarmer.com/ajax-libraries/


Yukarıdaki bağlantı öldü Aynı tablo burada: https://www.javascriptstuff.com/ajax-libraries/

Veya burada: resim açıklamasını buraya girin


6
Yine de aksiyoslar üzerinde getirmenin faydasını bulamıyorum. Neden aksiyomlarla gitmem gerektiğine dair bir fikrin var mı?
Gorakh Nath

4
Getirme standart bir fetch.spec.whatwg.org görmek olduğunu düşünüyorum ... axios daha fazla özellik olabilir çünkü bunu takip etmez .... Ben sonunda temelleri (ajax http istek) yapmak düşünüyorum ama bağlıdır İhtiyacınız olan şeyde ... Bir transformatöre ihtiyacım yoktu ... yani standart bir lib almak bir profesyonel ...
Lucas Katayama

4
Unutmayın bu tablo yanıltıcıdır. Bu tanımlar fetcholarak Native ( - gerek kütüphane için sadece bunu kullanabilirsiniz Anlamı aslında ederken, buna göre tablo kaynağına,) fetcholduğu bazı platformlarda uygulanmadı (özellikle IE tüm sürümlerinde) kendisi için bir sağlamanız gerekir, harici poli dolgu zaten.
Luca Fagioli

3
@ Jack123 getirme tarafından belirtilen farka ek olarak, timeoutbu temel işlevselliği uygulamak için ayrı bir modül kullanmamız gibi (çok garip) gibi temel bir ajax işlevselliği sağlamaz .
Apurva jain

2
@LucasKatayama Bağlantı kopmuş gibi görünüyor
vancy-pants

30

GitHub'daki mzabriskie'ye göre :

Genel olarak çok benzerler. Axios'un bazı faydaları:

  • Transformers: bir istek yapılmadan önce veya bir yanıt alındıktan sonra veriler üzerinde dönüşüm gerçekleştirilmesine izin ver

  • Durdurucular: isteği veya yanıtı tamamen değiştirmenize izin verir (başlıklar da). ayrıca, bir istek yapılmadan önce veya Promise yerleşmeden önce zaman uyumsuz işlemler gerçekleştirin

  • Dahili XSRF koruması

lütfen Tarayıcı Destek Eksenlerini kontrol edin

resim açıklamasını buraya girin

Sanırım aksiyom kullanmalısın.


4
Kabul. Axios da küçük enuff ithalatıdır, böylece şişkinlik çok endişe verici değildir - paket boyutu hakkında biraz deli ise, ifade veya mongooz gibi bir şeyin aksine, endişelenebilirler. :)
CodeFinity

1
Lütfen yasal düzenlemeleri geri almayın veya atıfta bulunmadan içeriği kopyalamayın.
jonrsharpe

9

Getirme API'sı ile axios API'sı arasında bir büyük fark daha

  • Hizmet çalışanını kullanırken, getirme API'sını yalnızca HTTP isteğini kesmek istiyorsanız kullanmanız gerekir
  • Ör. Servis çalışanı kullanarak PWA'da önbellekleme yaparken, axios API'sı kullanıyorsanız önbellekleme yapamazsınız (yalnızca getirme API'sı ile çalışır)

6
Herkes bunun gerçekten doğru olduğunu doğrulayabilir mi? Bu 1 kişi, ama 9 upvotes aynı fikirde gibi görünüyor bu konuda yorum görmek güzel olurdu (sormak neden hizmet işçisi pwa çevrimdışı ile axios kullanıyorum.
Tom Stickel

Elbette, bu konuda birkaç yorum daha olabilir, ancak axios kullanırken önbellekleme ile ilgili sorunlar yaşıyordum ve axios'u fetch () API'leriyle değiştirdiğimde çözüldü
Vaibhav Bacchav

1
Bu doğru gibi görünüyor, ancak yakın bir gelecekte düzeltilebilir: github.com/axios/axios/pull/2891
arkhz

7

Axios, NPM kullanılarak bir React projesine kolayca kurulabilen bağımsız bir üçüncü taraf paketidir.

Bahsettiğiniz diğer seçenek getirme işlevidir. Axios'un aksine, fetch()çoğu modern tarayıcıda yerleşiktir. Getirme ile üçüncü taraf bir paket yüklemenize gerek yoktur.

Bu size kalmış, fetch()ne yaptığınızı bilmiyorsanız VEYA sadece bence daha basit olan Axios'u kullanmanız durumunda gidebilir ve potansiyel olarak berbat edebilirsiniz .


1
Getirme tamam, ama Axios sizin söylediğiniz gibi - daha basit. Modern tarayıcılarda (getirme) yerleşik olan, özellik sürümleri için harika değildir. - Ben Axios'u tercih ediyorum
Tom Stickel

5

Buna ek olarak ... Testimde çeşitli kütüphanelerle oynuyordum ve 4xx isteklerinin farklı şekilde ele alındığını fark ettim. Bu durumda testim 400 yanıtı olan bir json nesnesi döndürür. 3 popüler kütüphanenin cevabı şu şekilde ele alınır:

// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)


// node-fetch
const body = await fetch(url)
console.log(await body.json())


// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)

İlgi olduğunu request-promise-nativeve axiossüre 4xx yanıta atmak node-fetchdeğildir. Ayrıca fetchjson ayrıştırma için bir söz kullanır.


1
@baitun bunlar benden (Mocha kullanıyordum) sık sık .throwsatılan hataları test etmek için bir yöntem olan birim testleri çalıştırıyorlar . Bu durumda, 3 liberden gelen reddleri test ediyordum ve döndürülen verilerdeki farkı fark ettim.
cyberwombat

3

Aksiyosun faydaları:

  • Transformers: istek yapılmadan önce veya yanıt alındıktan sonra veriler üzerinde dönüşüm gerçekleştirilmesine izin ver
  • Durdurucular: isteği veya yanıtı tamamen değiştirmenize izin verir (başlıklar da). ayrıca istek yapılmadan veya Promise yerleşmeden önce zaman uyumsuz işlemler gerçekleştirin
  • Dahili XSRF koruması

Avantajları axiosoverfetch

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.