Fetch/XMLHttpRequest em TypeScript
Este artigo explica Fetch/XMLHttpRequest em TypeScript.
Você pode aprender como usar a Fetch API
e o XMLHttpRequest
, bem como suas diferenças.
YouTube Video
Fetch/XMLHttpRequest em TypeScript
Em TypeScript, as solicitações HTTP são realizadas principalmente usando duas APIs: Fetch API
e XMLHttpRequest
. Ao usar TypeScript, você pode introduzir verificações de tipo para solicitações e respostas ao realizar comunicação assíncrona com essas APIs, permitindo escrever um código mais seguro. Abaixo, introduziremos como usar cada uma delas.
Fetch API
A Fetch API
é uma API baseada em Promises usada para realizar comunicação assíncrona (solicitações HTTP) de forma simples. Em TypeScript, você pode fazer solicitações usando o método fetch
e processar as respostas de maneira segura para tipos.
Uso Básico
Abaixo está um exemplo básico usando uma solicitação 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 });
- Este código envia uma solicitação
GET
para a URL especificada, analisa a resposta recebida como JSON e exibe o resultado no console.
Manipulação de dados com segurança de tipos em TypeScript
Como a resposta do método fetch
tem um tipo indefinido, você pode aproveitar a verificação de tipos do TypeScript definindo explicitamente o tipo da resposta.
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 });
- Este código aplica o tipo
Post
aos dados obtidos comfetch
, processa a resposta de forma segura quanto ao tipo e exibe o título de cada post no console.
Exemplo de uma solicitação POST
Ao enviar dados para o servidor, use o método POST
. Para enviar JSON no corpo da solicitação, especifique 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 });
- Este código envia dados em formato JSON para o servidor com uma solicitação
POST
, recebe a resposta como JSON e exibe no console.
Fetch
usando funções assíncronas (async
/await
)
Ao usar async
/await
em TypeScript, você pode escrever processamento assíncrono de maneira mais simples.
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();
- Este código busca dados dos posts de forma assíncrona usando a sintaxe
async
/await
, processa a resposta como do tipoPost[]
e exibe no console.
XMLHttpRequest
XMLHttpRequest
é uma API mais antiga e um pouco mais complexa em comparação com a Fetch API
, mas pode ser usada quando compatibilidade com navegadores ou controle mais avançado são necessários.
Uso básico do XMLHttpRequest
Abaixo está um exemplo usando uma solicitação 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();
- Este código envia uma solicitação
GET
para a URL especificada usandoXMLHttpRequest
, analisa a resposta como JSON e exibe o resultado no console.
Exemplo de uma solicitação POST
Ao enviar dados ao servidor, especifique POST
no método open
e envie os dados com 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);
- Este código envia dados em formato JSON para o servidor com uma solicitação
POST
usandoXMLHttpRequest
e exibe no console a resposta contendo os dados criados.
Tratamento de erros com XMLHttpRequest
Você pode lidar com erros de solicitação usando o 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();
- Este código realiza uma solicitação
GET
comXMLHttpRequest
, lida com erros de requisição usandoonerror
e registra adequadamente a resposta tanto em caso de sucesso quanto de falha.
Comparação entre Fetch API e XMLHttpRequest
Funcionalidade | Fetch API | XMLHttpRequest |
---|---|---|
API Moderna | ○ | × |
Suporte a Promises | ○ | × |
Legibilidade | Alta (funciona bem com async /await ) |
Baixa (muitos callbacks) |
Compatibilidade com Navegadores | Não compatível com alguns navegadores antigos | Compatível com todos os navegadores principais |
Rastreamento de Progresso | △ (possível com ReadableStream ) |
○ (evento onprogress disponível) |
Tratamento de Erros | Erros são capturados na cadeia de Promise | Necessário usar onerror |
Resumo
Em TypeScript, você pode escrever requisições assíncronas de forma concisa e com código seguro para tipos usando a Fetch API
. Por outro lado, XMLHttpRequest
é uma API mais antiga, mas pode ainda ser usada em certas situações. Geralmente, é recomendado usar a moderna e simples Fetch API
, mas se for necessária compatibilidade com navegadores ou rastreamento de progresso, XMLHttpRequest
também pode ser considerado.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.