Fetch/XMLHttpRequest in TypeScript
Questo articolo spiega Fetch/XMLHttpRequest in TypeScript.
Puoi imparare come utilizzare l'API Fetch
e XMLHttpRequest
, e le loro differenze.
YouTube Video
Fetch/XMLHttpRequest in TypeScript
In TypeScript, le richieste HTTP vengono principalmente effettuate utilizzando due API: Fetch API
e XMLHttpRequest
. Utilizzando TypeScript, è possibile introdurre il controllo dei tipi per richieste e risposte durante la comunicazione asincrona con queste API, permettendo di scrivere codice più sicuro. Di seguito, introdurremo come utilizzare ciascuna di esse.
Fetch API
La Fetch API
è un'API basata su Promise utilizzata per eseguire comunicazioni asincrone (richieste HTTP) in modo semplice. In TypeScript, è possibile effettuare richieste utilizzando il metodo fetch
e gestire le risposte in modo sicuro rispetto ai tipi.
Uso di base
Di seguito un esempio di base che utilizza una richiesta GET
.
1const url = 'https://jsonplaceholder.typicode.com/posts';
2
3fetch(url)
4 .then(response => {
5 if (!response.ok) {
6 throw new Error('Network response was not ok');
7 }
8 return response.json(); // Parse the response as JSON
9 })
10 .then(data => {
11 console.log(data);
12 })
13 .catch(error => {
14 console.error('Fetch error:', error);
15 });
- Questo codice invia una richiesta
GET
all'URL specificato, analizza la risposta ricevuta come JSON e la stampa nella console.
Gestione dei dati sicura rispetto ai tipi in TypeScript
Poiché la risposta dal metodo fetch
ha un tipo non chiaro, è possibile sfruttare il controllo dei tipi di TypeScript definendo esplicitamente il tipo di risposta.
1// Define the type for the response data
2interface Post {
3 userId: number;
4 id: number;
5 title: string;
6 body: string;
7}
8
9const url = 'https://jsonplaceholder.typicode.com/posts';
10
11fetch(url)
12 .then(response => response.json())
13 .then((data: Post[]) => {
14 data.forEach(post => {
15 console.log(`Title: ${post.title}`);
16 });
17 })
18 .catch(error => {
19 console.error('Error fetching data:', error);
20 });
- Questo codice applica il tipo
Post
ai dati recuperati confetch
, elabora la risposta in modo type-safe e stampa il titolo di ogni post nella console.
Esempio di richiesta POST
Quando si inviano dati al server, utilizzare il metodo POST
. Per inviare JSON nel corpo della richiesta, specificare headers
e body
.
1const postData = {
2 title: 'foo',
3 body: 'bar',
4 userId: 1
5};
6
7fetch('https://jsonplaceholder.typicode.com/posts', {
8 method: 'POST',
9 headers: {
10 'Content-Type': 'application/json'
11 },
12 body: JSON.stringify(postData)
13 })
14 .then(response => response.json())
15 .then(data => {
16 console.log('Created post:', data);
17 })
18 .catch(error => {
19 console.error('Error posting data:', error);
20 });
- Questo codice invia dati in formato JSON al server tramite una richiesta
POST
, riceve la risposta come JSON e la stampa nella console.
Fetch
con funzioni asincrone (async
/await
)
Utilizzando async
/await
in TypeScript, è possibile scrivere processi asincroni in modo più semplice.
1// Define the type for the response data
2interface Post {
3 userId: number;
4 id: number;
5 title: string;
6 body: string;
7}
8
9async function fetchPosts() {
10 try {
11 const response = await fetch('https://jsonplaceholder.typicode.com/posts');
12 if (!response.ok) {
13 throw new Error('Network response was not ok');
14 }
15 const data: Post[] = await response.json();
16 console.log(data);
17 } catch (error) {
18 console.error('Fetch error:', error);
19 }
20}
21
22fetchPosts();
- Questo codice recupera asincronamente i dati dei post usando la sintassi
async
/await
, elabora la risposta come tipoPost[]
e la stampa nella console.
XMLHttpRequest
XMLHttpRequest
è un'API più datata ed è in qualche modo più complessa rispetto alla Fetch API
, ma può essere utilizzata quando è necessaria la compatibilità con i browser o un controllo più avanzato.
Uso di base di XMLHttpRequest
Di seguito un esempio che utilizza una richiesta GET
.
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);
3
4xhr.onreadystatechange = function () {
5 if (xhr.readyState === 4 && xhr.status === 200) {
6 const data = JSON.parse(xhr.responseText);
7 console.log(data);
8 }
9};
10
11xhr.send();
- Questo codice invia una richiesta
GET
all'URL specificato usandoXMLHttpRequest
, analizza la risposta come JSON e la stampa nella console.
Esempio di richiesta POST
Quando si inviano dati al server, specificare POST
nel metodo open
e inviare i dati con send
.
1const xhr = new XMLHttpRequest();
2xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts', true);
3xhr.setRequestHeader('Content-Type', 'application/json');
4
5const postData = JSON.stringify({
6 title: 'foo',
7 body: 'bar',
8 userId: 1
9});
10
11xhr.onreadystatechange = function () {
12 if (xhr.readyState === 4 && xhr.status === 201) {
13 console.log('Created post:', xhr.responseText);
14 }
15};
16
17xhr.send(postData);
- Questo codice invia dati in formato JSON al server tramite una richiesta
POST
usandoXMLHttpRequest
e stampa nella console la risposta che contiene i dati creati.
Gestione degli errori con XMLHttpRequest
È possibile gestire gli errori delle richieste utilizzando l'evento onerror
.
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);
3
4xhr.onerror = function () {
5 console.error('Request failed');
6};
7
8xhr.onload = function () {
9 if (xhr.status === 200) {
10 console.log('Response:', xhr.responseText);
11 } else {
12 console.error('Error:', xhr.status);
13 }
14};
15
16xhr.send();
- Questo codice esegue una richiesta
GET
conXMLHttpRequest
, gestisce gli errori di richiesta cononerror
e registra correttamente la risposta sia in caso di successo che di errore.
Confronto tra Fetch API e XMLHttpRequest
Caratteristica | Fetch API | XMLHttpRequest |
---|---|---|
API Moderna | ○ | × |
Supporto alle Promesse | ○ | × |
Leggibilità | Alta (funziona bene con async /await ) |
Bassa (molti callback) |
Compatibilità con i Browser | Non supportato in alcuni browser più vecchi | Supportato da tutti i principali browser |
Monitoraggio del Progresso | △ (possibile con ReadableStream ) |
○ (evento onprogress disponibile) |
Gestione degli Errori | Gli errori vengono gestiti nella catena delle Promesse | È necessario utilizzare onerror |
Riepilogo
In TypeScript, puoi scrivere richieste asincrone in modo conciso e con codice sicuro usando l'API Fetch
. D'altra parte, XMLHttpRequest
è un'API più datata ma può ancora essere utilizzata in alcune situazioni. In generale, è consigliato utilizzare l'API Fetch
, semplice e moderna, ma se sono necessarie la compatibilità del browser o il monitoraggio del progresso, si può anche considerare l'uso di XMLHttpRequest
.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.