Qual è la differenza tra Axios e Fetch?


Risposte:


165

Fetch e Axios sono molto simili in termini di funzionalità, ma per una maggiore compatibilità con le versioni precedenti Axios sembra funzionare meglio (ad esempio, il recupero non funziona in IE 11, controlla questo post )

Inoltre, se lavori con richieste JSON, le seguenti sono alcune differenze con cui mi sono imbattuto.

Recupera richiesta post JSON

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
}

Richiesta post Axios JSON

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
}

Così:

  • Fetch's body = Dati di Axios
  • Il corpo di Fetch deve essere stretto , i dati di Axios contengono l' oggetto
  • Fetch ha url nella richiesta di oggetto, Axios ha url in oggetto di richiesta
  • La funzione di richiesta di recupero include l' URL come parametro , la funzione di richiesta di Axios non include l'URL come parametro .
  • La richiesta di recupero è ok quando l'oggetto response contiene la proprietà ok , la richiesta Axios è ok quando lo stato è 200 e statusText è 'OK'
  • Per ottenere la risposta dell'oggetto JSON: in fetch chiamare il json () sull'oggetto risposta, in Axios ottenere la proprietà data dell'oggetto risposta.

Spero che questo ti aiuti.


Ecco altre domande. Una volta che responseOk è vero, dobbiamo controllare lo stato in response.data se ha lo stato fornito? grazie
Yang Wang,

1
Axios request is ok when status is 200 and statusText is 'OK' Che dire di altri httpStatus nell'intervallo 2xx come 201 o 204?
leonbloy,

46

Sono librerie di richieste HTTP ...

Finisco con lo stesso dubbio, ma il tavolo in questo post mi fa andare avanti isomorphic-fetch. Che è fetchma funziona con NodeJS.

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


Il link sopra è morto La stessa tabella è qui: https://www.javascriptstuff.com/ajax-libraries/

O qui: inserisci qui la descrizione dell'immagine


6
Non riesco ancora a trovare il vantaggio di recuperare gli assi. Puoi avere idea del perché dovrei andare con gli assi?
Gorakh Nath,

4
Penso che il recupero sia uno standard vedi fetch.spec.whatwg.org ... axios potrebbe avere più funzionalità perché non ne consegue che .... Penso che alla fine facciano le basi (ajax http request) ma dipende su ciò di cui hai bisogno ... Non avevo bisogno di un trasformatore ... quindi ottenere una lib standard è un pro ...
Lucas Katayama,

4
Ricorda che quella tabella è fuorviante. Definisce fetchcome Native ( Senso si può semplicemente usare - non c'è bisogno di una biblioteca , di conseguenza per l'origine di tabella), mentre in realtà fetchè non implementato in alcune piattaforme (in particolare in tutte le versioni di IE), per i quali è necessario fornire un polyfill esterno comunque.
Luca Fagioli,

3
L'aggiunta alla differenza menzionata da @ jack123 fetch non fornisce anche una funzionalità ajax di base come timeout(che è molto strano), dobbiamo usare un modulo separato per implementare questa funzionalità di base.
Apurva jain

2
@LucasKatayama Il link sembra essere rotto
vancy-pants

30

Secondo mzabriskie su GitHub :

Nel complesso sono molto simili. Alcuni vantaggi di axios:

  • Trasformatori: consente di eseguire trasformazioni sui dati prima di effettuare una richiesta o dopo aver ricevuto una risposta

  • Intercettori: consentono di modificare completamente la richiesta o la risposta (anche le intestazioni). inoltre, eseguire operazioni asincrone prima che venga effettuata una richiesta o prima che la promessa si risolva

  • Built-in XSRF protezione

si prega di controllare Browser Support Axios

inserisci qui la descrizione dell'immagine

Penso che dovresti usare gli axios.


4
Concordato. Axios ha anche una piccola importanza in termini di ingombro, in modo che il gonfiore non sia molto preoccupante - al contrario di qualcosa come espresso o mangusta dove se si è un po 'pazzi per le dimensioni del pacchetto, potrebbero essere preoccupati. :)
CodeFinity

1
Non ripristinare le modifiche legittime o copiare il contenuto senza attribuzione.
jonrsharpe,

9

Un'altra importante differenza tra API di recupero e API axios

  • Durante l'utilizzo dell'assistente tecnico, è necessario utilizzare solo l'API di recupero se si desidera intercettare la richiesta HTTP
  • Ex. Durante l'esecuzione della memorizzazione nella cache in PWA utilizzando il service man non sarà possibile memorizzare nella cache se si utilizza l'API axios (funziona solo con l'API di recupero)

6
Qualcuno può verificare che questo sia davvero vero? È 1 persona, ma i 9 voti sembrano essere d'accordo, ma sarebbe bello vedere i commenti su questo (sto usando gli assi con il personale di servizio pwa offline è il motivo per cui lo chiedo.
Tom Stickel,

Certo, possiamo avere qualche altro commento in merito, ma ho riscontrato problemi con la memorizzazione nella cache durante l'utilizzo di axios e quando ho sostituito axios con API fetch () si è risolto
Vaibhav Bacchav

1
Questo sembra essere corretto, ma potrebbe essere risolto in un prossimo futuro: github.com/axios/axios/pull/2891
arkhz

7

Axios è un pacchetto autonomo di terze parti che può essere facilmente installato in un progetto React utilizzando NPM.

L'altra opzione che hai citato è la funzione di recupero. A differenza di Axios,fetch() è integrato nei browser più moderni. Con fetch non è necessario installare un pacchetto di terze parti.

Quindi dipende da te, puoi andare avanti fetch()e potenzialmente incasinare se non sai cosa stai facendo O semplicemente usare Axios che è più semplice secondo me.


1
Fetch è ok, ma Axios è come hai detto tu, più semplice. Ciò che è integrato nei browser moderni (recupero) non è eccezionale per le versioni di funzionalità. - Quindi preferisco Axios
Tom Stickel,

5

Inoltre ... stavo giocando con varie librerie nel mio test e ho notato la loro diversa gestione delle richieste 4xx. In questo caso il mio test restituisce un oggetto json con una risposta 400. Ecco come 3 librerie popolari gestiscono la risposta:

// 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)

Di interesse è quello request-promise-nativee axiosgetta sulla risposta 4xx mentre node-fetchnon lo fa. fetchUtilizza anche una promessa per l'analisi json.


1
@baitun questi sono da me in esecuzione test unitari che (penso che stavo usando Mocha) hanno spesso un .throwsmetodo per testare gli errori generati. In questo caso stavo testando i rifiuti da tutte le librerie 3 e ho notato la differenza nei dati restituiti.
cyberwombat,

3

Vantaggi degli assi:

  • Trasformatori: consente di eseguire trasformazioni sui dati prima che venga effettuata la richiesta o dopo aver ricevuto la risposta
  • Intercettori: consentono di modificare completamente la richiesta o la risposta (anche le intestazioni). eseguire anche operazioni asincrone prima che venga effettuata la richiesta o prima che la promessa si risolva
  • Protezione XSRF integrata

Vantaggi di axiosoltrefetch

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.