Fetch
Fetch
O fetch é uma função que permite fazer requisições de rede para recuperar recursos.
Ele retorna uma Promise que resolve para a resposta da requisição, que pode ser
manipulada usando métodos como .then() e .catch().
Sintaxe Básica
A sintaxe básica do fetch é a seguinte:
javascript
fetch(url, options)
.then(response => {
// Manipula a resposta
})
.catch(error => {
// Manipula erros
});
url: Uma string que representa a URL do recurso que você deseja buscar.
options (opcional): Um objeto que contém parâmetros adicionais, como o método HTTP,
cabeçalhos, corpo da requisição, entre outros.
Exemplos de Uso
1. Requisição GET Simples
A requisição mais comum é a método GET, que é usada para obter dados de um recurso.
javascript
fetch('https://api.exemplo.com/dados')
.then(response => {
if (!response.ok) {
throw new Error('Erro na rede: ' + response.statusText);
}
return response.json(); // Retorna a resposta como JSON
})
.then(dados => {
console.log(dados); // Manipula os dados da resposta
})
.catch(error => {
console.error('Erro na requisição:', error);
});
2. Requisição POST
Para enviar dados ao servidor, você pode usar o método POST.
javascript
fetch('https://api.exemplo.com/dados', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
nome: 'João',
idade: 30
})
})
.then(response => {
if (!response.ok) {
throw new Error('Erro na rede: ' + response.statusText);
}
return response.json();
})
.then(dados => {
console.log('Dados enviados com sucesso:', dados);
})
.catch(error => {
console.error('Erro na requisição:', error);
});
3. Requisição com Configurações Personalizadas
Você pode personalizar muito uma requisição usando o objeto options.
javascript
const url = 'https://api.exemplo.com/atualiza-dados';
const dadosAtualizados = {
id: 1,
nome: 'Maria',
};
fetch(url, {
method: 'PUT', // Para atualizar dados
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(dadosAtualizados)
})
.then(response => {
if (!response.ok) {
throw new Error('Erro na rede: ' + response.statusText);
}
return response.json();
})
.then(dados => {
console.log('Dados atualizados com sucesso:', dados);
})
.catch(error => {
console.error('Erro na requisição:', error);
});
4. Encadeamento de Requisições
O fetch permite encadear múltiplas requisições de forma limpa:
javascript
fetch('https://api.exemplo.com/dados1')
.then(response => response.json())
.then(dados1 => {
console.log('Dados 1:', dados1);
return fetch('https://api.exemplo.com/dados2'); // Nova requisição
})
.then(response => response.json())
.then(dados2 => {
console.log('Dados 2:', dados2);
})
.catch(error => {
console.error('Erro na requisição:', error);
});
5. Uso de Async/Await
Podemos usar async/await para tornar o código de requisições mais legível:
javascript
async function obterDados() {
try {
const response = await fetch('https://api.exemplo.com/dados');
if (!response.ok) {
throw new Error('Erro na rede: ' + response.statusText);
}
const dados = await response.json(); // Retorna como JSON
console.log(dados);
} catch (error) {
console.error('Erro na requisição:', error);
}
}
// Chamando a função
obterDados();
Tratamento de Erros
Um aspecto importante ao usar fetch é que ele não rejeita a Promise quando a
resposta HTTP indica um erro (como 404 ou 500). Você deve verificar a propriedade
ok do objeto Response para determinar se a requisição foi bem-sucedida.
javascript
fetch('https://api.exemplo.com/dados', {
method: 'GET',
headers: {
'Authorization': 'Bearer seu_token_aqui', // Token de autenticação
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(dados => {
console.log(dados);
})
.catch(error => {
console.error('Erro na requisição:', error);
});
Resumo
fetch é uma API para fazer requisições de rede que retorna uma Promise.
Permite realizar operações assíncronas para importar dados de APIs.
É possível personalizar requisições com métodos, cabeçalhos e corpos.
A verificação do status da resposta é crucial, pois fetch não rejeita a Promise em
caso de erros HTTP (como 404 ou 500).
Combina bem com async/await para melhor legibilidade.