Axios è un client HTTP open source per JavaScript e TypeScript, che funziona sia nel browser che nell´ambiente Node.js. La libreria fornisce un´interfaccia comoda basata su Promise per inviare richieste HTTP con supporto per intercettori, serializzazione automatica JSON e annullamento delle richieste. Secondo il repository ufficiale su GitHub, il progetto conta oltre 100.000 stelle. Axios è una delle librerie più popolari per lavorare con REST API nell´ecosistema JavaScript.
Punti chiave
Axios è una libreria JavaScript progettata per effettuare richieste HTTP dal browser e dall´ambiente Node.js. È costruita su XMLHttpRequest nel browser e sul modulo http in Node.js, fornendo un´API unificata per entrambe le piattaforme.
Il principale vantaggio di Axios rispetto al fetch nativo è la gestione automatica del JSON, il supporto agli intercettori e una gestione degli errori più comoda. A differenza di fetch, Axios non richiede due chiamate .then per ottenere il corpo JSON della risposta e lancia automaticamente eccezioni in caso di errori HTTP (4xx, 5xx).
La libreria supporta tutti i principali metodi HTTP: GET, POST, PUT, DELETE, PATCH e HEAD. Può essere utilizzata sia in progetti semplici che in grandi applicazioni aziendali con centinaia di migliaia di richieste giornaliere.
L´architettura di Axios si basa sul concetto di adattatori. La libreria astrae il livello di trasporto: utilizza XMLHttpRequest nel browser e il modulo http o https in Node.js. Ciò fornisce un´interfaccia unica indipendentemente dall´ambiente di esecuzione.
Ogni richiesta attraversa una catena di intercettori che possono modificare la configurazione della richiesta o della risposta. Dopo gli intercettori, la richiesta viene passata all´adattatore, che esegue la chiamata HTTP effettiva. La risposta attraversa poi gli intercettori di risposta prima di raggiungere il codice dell´applicazione.
Axios include molte funzionalità integrate che lo rendono una scelta comoda per lavorare con HTTP in applicazioni mobili e web. Esaminiamo le principali.
Durante l´invio di una richiesta, Axios trasforma automaticamente un oggetto JavaScript in una stringa JSON utilizzando JSON.stringify. Durante la ricezione di una risposta, la libreria converte il JSON nuovamente in un oggetto. Ciò evita allo sviluppatore la serializzazione e deserializzazione manuale dei dati.
Nell´ambiente browser, Axios aggiunge automaticamente le intestazioni XSRF-TOKEN dai cookie, proteggendo l´applicazione dalla falsificazione di richieste cross-site. Per farlo, basta configurare il server per inviare il token in un cookie chiamato XSRF-TOKEN.
La libreria supporta l´impostazione di un timeout tramite il parametro timeout e l´annullamento della richiesta tramite AbortController. Ciò è particolarmente importante nelle applicazioni mobili con connessioni instabili, dove le richieste bloccate consumano batteria e dati.
L´installazione di Axios viene effettuata tramite qualsiasi gestore di pacchetti. La libreria è disponibile nel registro npm e può essere utilizzata sia in progetti Node.js che browser. Per TypeScript, i tipi sono inclusi nel pacchetto principale — non sono necessarie dipendenze aggiuntive.
Dopo l´installazione, puoi creare un´istanza con una configurazione di base: URL base, timeout predefinito, intestazioni comuni. Ciò evita di ripetere gli stessi parametri in ogni richiesta e consente di gestire centralmente le impostazioni del client HTTP.
# Installare tramite npm
npm install axios
# Installare tramite yarn
yarn add axios
# Installare tramite pnpm
pnpm add axios
Si consiglia di creare un´istanza separata di Axios per ogni servizio API. Ciò permette di impostare un URL base, intestazioni standard e timeout che verranno applicati a tutte le richieste di questa istanza senza ripeterli in ogni chiamata.
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.example.com/v1',
timeout: 10000,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
Gli esempi di richieste mostrano i principali modelli di utilizzo di Axios. Tutti gli esempi utilizzano la sintassi async/await, che rende il codice asincrono più leggibile rispetto alle catene .then().
Per ottenere dati dal server, viene utilizzato il metodo axios.get. I parametri della richiesta vengono passati tramite l´oggetto params, che viene automaticamente trasformato in una query string. La risposta contiene i dati nel campo data, lo stato in status e le intestazioni in headers.
interface User {
id: number;
name: string;
email: string;
}
async function getUsers() {
try {
const response = await api.get<User[]>('/users', {
params: { page: 1, limit: 10 }
});
return response.data;
} catch (error) {
console.error('Errore caricamento utenti', error);
throw error;
}
}
Per inviare dati al server, viene utilizzato axios.post. Il secondo argomento è un oggetto con dati, che Axios serializza automaticamente in JSON. Il Content-Type viene impostato su application/json per impostazione predefinita.
interface CreateUserDto {
name: string;
email: string;
role: string;
}
async function createUser(data: CreateUserDto) {
const response = await api.post<User>('/users', data);
return response.data;
}
Gli intercettori sono funzioni middleware che vengono eseguite per ogni richiesta o risposta. Permettono di aggiungere token di autorizzazione, registrare richieste e gestire errori centralmente. Un intercettore di richiesta aggiunge l´intestazione Authorization con un token recuperato dall´archivio.
// Intercettore di richiesta — aggiunge token di autorizzazione
api.interceptors.request.use(
(config) => {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
// Intercettore di risposta — gestisce errori 401
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
redirectToLogin();
}
return Promise.reject(error);
}
);
La gestione degli errori in Axios si basa sul meccanismo delle eccezioni. A differenza di fetch, Axios intercetta automaticamente gli errori HTTP (4xx, 5xx) e li passa al blocco catch. L´oggetto errore contiene informazioni sulla risposta del server, sulla richiesta e sul contesto di esecuzione.
È importante distinguere tre tipi di errori: errore di risposta del server (response), errore di richiesta (request) ed errore di configurazione (config). Il primo si verifica quando una chiamata HTTP viene eseguita con successo ma restituisce un codice di errore, il secondo quando non cè risposta dal server, e il terzo quando la configurazione della richiesta non è valida.
import axios, { AxiosError } from 'axios';
async function safeRequest() {
try {
return await api.get('/data');
} catch (error) {
if (error instanceof AxiosError) {
if (error.response) {
console.warn('Errore di risposta', error.response.status);
} else if (error.request) {
console.warn('Nessuna risposta dal server');
} else {
console.warn('Errore di configurazione');
}
}
}
}
| Metodo HTTP | Metodo Axios | Descrizione |
|---|---|---|
| GET | axios.get(url, config) | Ottenere dati |
| POST | axios.post(url, data, config) | Creare risorsa |
| PUT | axios.put(url, data, config) | Aggiornare risorsa |
| DELETE | axios.delete(url, config) | Eliminare risorsa |
| PATCH | axios.patch(url, data, config) | Aggiornamento parziale |
Il confronto di Axios con la Fetch API nativa aiuta a capire quando ogni tecnologia è appropriata. Fetch è un´API integrata nel browser che non richiede installazione. Axios è una libreria di terze parti con funzionalità aggiuntive. Per richieste semplici, fetch è sufficiente; per applicazioni complesse con intercettori e gestione centralizzata degli errori, Axios è più comodo.
Fetch non considera gli errori HTTP (4xx, 5xx) come eccezioni — bisogna verificare response.ok. Fetch richiede due chiamate .then() per ottenere il JSON: response.json() restituisce poi una Promise con i dati. Axios lo fa automaticamente. Fetch non supporta il progresso del caricamento file senza polyfill aggiuntivi. Axios ha onUploadProgress e onDownloadProgress integrati.
In Node.js, Fetch è disponibile dalla versione 18 come funzionalità sperimentale, mentre Axios funziona stabilmente da Node.js 10. Per i progetti che supportano versioni precedenti di Node.js, la scelta è chiaramente a favore di Axios. Per progetti browser moderni senza elaborazione complessa delle richieste, fetch può essere sufficiente.
Domande frequenti
Axios analizza automaticamente JSON, lancia eccezioni in caso di errori HTTP e supporta gli intercettori. Fetch richiede due chiamate .then per JSON e non tratta 4xx/5xx come errori. Axios è anche più facile da configurare tramite un oggetto di impostazioni.
No, i tipi TypeScript sono inclusi nel pacchetto principale axios. Non sono necessarie dipendenze aggiuntive come @types/axios — basta importare axios dal pacchetto con lo stesso nome.
Usa AbortController: crea un´istanza di AbortController e passa il suo signal alla configurazione della richiesta. Quando chiami controller.abort(), la richiesta verrà annullata e la Promise verrà respinta con un messaggio di errore appropriato.
Sì, Axios è completamente compatibile con React Native. La libreria utilizza l´XMLHttpRequest integrato, disponibile nell´ambiente React Native. Tutte le funzionalità, inclusi intercettori e annullamento richieste, funzionano senza configurazione aggiuntiva.
Usa un intercettore di richiesta per aggiungere centralmente l´intestazione Authorization. Ciò elimina la necessità di specificare il token in ogni richiesta singolarmente e consente di gestire uniformemente la scadenza del token.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche