Como consumir APIs com JavaScript Moderno: Projeto completo com Fetch API, Async/Await e manipulação de DOM 🚀
Você já percebeu que alguns pequenos trechos de código acabam se tornando verdadeiros itens salva-vidas durante o desenvolvimento? Neste artigo, vamos construir um projeto completo utilizando JavaScript moderno para consumir informações externas, percorrer uma lista de dados e gerar todo o conteúdo diretamente no HTML. Uma habilidade essencial para qualquer desenvolvedor Front-End ou Full Stack.
Itens salva-vidas com Javascript ⛑️
Um projeto que construímos totalmente funcional utilizando JavaScript moderno para consumir informações externas, percorrer uma lista de dados e gerar todo o conteúdo diretamente no HTML. Embora o exemplo utilize um feed de notícias do Globo Esporte, o conceito apresentado pode ser aplicado em praticamente qualquer sistema que consuma APIs REST, JSON ou serviços externos. É exatamente esse tipo de conhecimento que diferencia um desenvolvedor iniciante de alguém que começa a construir projetos reais.
Como consumir APIs com JavaScript Moderno: Projeto completo com Fetch API, Async/Await e manipulação de DOM 🚀
"A diferença entre um desenvolvedor iniciante e um profissional não está em saber decorar sintaxe, mas em saber combinar ferramentas para resolver problemas reais. Consumir APIs é uma dessas habilidades que transformam código em soluções."
O que é Fetch API e por que usá-la?
A Fetch API é uma interface nativa do JavaScript que permite fazer requisições HTTP de forma
assíncrona. Ela substitui o antigo XMLHttpRequest e oferece uma sintaxe mais moderna e poderosa
para consumir dados de APIs e serviços externos.
Principais vantagens da Fetch API:
- Nativa: Não requer bibliotecas externas
- Baseada em Promises: Código mais limpo e organizado
- Suporte a JSON: Facilidade para trabalhar com dados
- Controle total: Headers, métodos HTTP, body, etc.
- Async/Await: Sintaxe síncrona para operações assíncronas
💡 Dica: A Fetch API é suportada por todos os navegadores modernos e é a forma recomendada para fazer requisições HTTP em JavaScript.
Estrutura do projeto
Nosso projeto vai consumir o feed de notícias do Globo Esporte e exibir as notícias em uma lista estilizada com Bootstrap. A estrutura é simples:
/projeto-feedge
index.html
main.js
README.md
O HTML - Estrutura base
O arquivo HTML é simples, com uma estrutura que utiliza Bootstrap para estilização:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Feed Globo Esporte</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet">
<script src="main.js" defer></script>
</head>
<body class="bg-light">
<div class="container py-5">
<h1 class="text-success mb-4">
📰 Últimas Notícias - Globo Esporte
</h1>
<div id="feed-lista" class="list-group shadow-sm">
<!-- Conteúdo gerado pelo JavaScript -->
</div>
</div>
</body>
</html>
O JavaScript - Consumindo a API
A parte mais importante do projeto é o JavaScript, que faz a requisição, processa os dados e gera o HTML dinamicamente:
// URL do feed RSS do Globo Esporte
const URL_FEED = "https://ge.globo.com/rss/ge";
// URL da API que converte RSS para JSON
const URL_API = `https://api.rss2json.com/v1/api.json?rss_url=${encodeURIComponent(URL_FEED)}`;
// Função principal para carregar o feed
async function carregarFeed() {
try {
// Faz a requisição para a API
const RESPOSTA = await fetch(URL_API);
const DADOS = await RESPOSTA.json();
const LISTA = document.getElementById("feed-lista");
// Limpa o container
LISTA.innerHTML = "";
// Percorre cada item do feed
DADOS.items.forEach(item => {
// Formata a data
const data = new Date(item.pubDate);
const dataFormatada = new Intl.DateTimeFormat("pt-BR", {
dateStyle: "short",
timeStyle: "short"
}).format(data);
// Extrai a imagem da notícia
const imagem =
item.thumbnail ||
item.description.match(/)?.[1] ||
"https://via.placeholder.com/140x90?text=GE";
// Cria o elemento da notícia
const noticia = document.createElement("a");
noticia.href = item.link;
noticia.target = "_blank";
noticia.className = "list-group-item list-group-item-action";
// Define o conteúdo HTML da notícia usando Template Literal
noticia.innerHTML = `
<div class="row">
<div class="col-md-3 col-lg-2">
<img
src="${imagem}"
class="img-fluid rounded"
style="width:100%;height:100px;object-fit:cover;"
alt="${item.title}">
</div>
<div class="col-md-9 col-lg-10">
<h5 class="mb-2 text-dark">
${item.title}
</h5>
<small class="text-muted">
🕒 ${dataFormatada}
</small>
<p class="mt-2 text-secondary">
${item.description
.replace(/<[^>]+>/g, "")
.substring(0, 160)}...
</p>
</div>
</div>
`;
// Adiciona a notícia à lista
LISTA.appendChild(noticia);
});
} catch (erro) {
console.error(erro);
document.getElementById("feed-lista").innerHTML = `
<div class="alert alert-danger">
Não foi possível carregar as notícias.
</div>
`;
}
}
// Executa a função
carregarFeed();
Explicando o código passo a passo
1. Fetch API e Async/Await
const RESPOSTA = await fetch(URL_API);
const DADOS = await RESPOSTA.json();
fetch(): Faz a requisição HTTP para a URLawait: Aguarda a resposta da requisiçãoresponse.json(): Converte a resposta para JSON- Async/Await: Torna o código assíncrono mais legível
2. Loop forEach
DADOS.items.forEach(item => {
// Processa cada notícia
});
forEach(): Método para iterar sobre arraysitem: Representa cada notícia do feed- Função arrow: Sintaxe concisa para callbacks
3. Manipulação do DOM
const noticia = document.createElement("a");
noticia.href = item.link;
noticia.className = "list-group-item list-group-item-action";
noticia.innerHTML = `...`;
LISTA.appendChild(noticia);
createElement(): Cria um novo elemento HTMLappendChild(): Adiciona o elemento ao DOMinnerHTML: Define o conteúdo HTMLclassName: Define as classes CSS
4. Template Literals
noticia.innerHTML = `
<h5 class="mb-2 text-dark">
${item.title}
</h5>
`;
`...`: Template literal com crases${}: Interpolação de variáveis- Multi-linha: Facilita a escrita de HTML
5. Expressões Regulares (Regex)
const imagem =
item.description.match(/)?.[1] ||
"https://via.placeholder.com/140x90?text=GE";
.match(): Busca padrões em strings?.[1]: Optional chaining para acesso seguro||: Fallback para imagem padrão
6. Formatação de datas
const dataFormatada = new Intl.DateTimeFormat("pt-BR", {
dateStyle: "short",
timeStyle: "short"
}).format(new Date(item.pubDate));
Intl.DateTimeFormat: API nativa para formataçãodateStyle: "short": Formato de data curto (dd/mm/yyyy)timeStyle: "short": Formato de hora curto (HH:mm)
Resultado final no navegador
Ao executar o projeto, o resultado é uma lista de notícias do Globo Esporte, com título, imagem, data/hora e um resumo do conteúdo, tudo estilizado com Bootstrap.
📰 Últimas Notícias - Globo Esporte
┌──────────────────────────────────────────────────────┐
│ [Imagem] Título da Notícia
│ 🕒 15/01/2024 14:30
│ Resumo da notícia com até 160...
├──────────────────────────────────────────────────────┤
│ [Imagem] Título da Notícia 2
│ 🕒 15/01/2024 14:15
│ Resumo da notícia com até 160...
└──────────────────────────────────────────────────────┘
Benefícios e aplicações práticas
📱 Aplicações práticas
- Dashboards de dados
- Agregadores de conteúdo
- Ferramentas de monitoramento
- Aplicações em tempo real
🎯 Habilidades desenvolvidas
- Consumo de APIs REST
- Manipulação de DOM
- JavaScript Assíncrono
- Tratamento de erros
Conclusão
Consumir APIs com JavaScript moderno é uma habilidade essencial para qualquer desenvolvedor Front-End ou Full Stack. O projeto que construímos neste artigo demonstra como combinar diversas ferramentas do JavaScript para criar uma aplicação funcional e profissional.
Neste artigo, você aprendeu:
- ✅ Como usar a Fetch API para fazer requisições HTTP
- ✅ Como trabalhar com Async/Await e Promises
- ✅ Como manipular o DOM dinamicamente
- ✅ Como usar Template Literals para gerar HTML
- ✅ Como usar Expressões Regulares (Regex) para extrair dados
- ✅ Como formatar datas com Intl.DateTimeFormat
- ✅ Como tratar erros de forma elegante
💡 Lembre-se: O JavaScript moderno oferece ferramentas poderosas para consumir APIs e criar aplicações dinâmicas. Dominar esses conceitos é fundamental para se destacar como desenvolvedor web.
📂 Código Fonte
Todo o código utilizado neste vídeo está disponível no GitHub para você baixar, testar e modificar:
GitHub - feedge🤔 O que você achou?
💬 Quer aprender JavaScript do ZERO? Comece agora a escrever seu primeiro código e seus fundamentos!
❓ FAQ: Perguntas Frequentes sobre JavaScript e Consumo de APIs
🎬 Assista ao Vídeos completo sobre Refatoração
O vídeo foi feito em Javascript mais o conceito pode ser utilizado em qualquer outra linguagem de programação..
🎬 Assista ao Vídeos completo sobre Refatoração
🔗 Conecte-se Comigo
💬 Qual recurso do JavaScript mais salvou você durante um projeto? Foi o Fetch API, Async/Await, Promises, Regex ou algum outro? Escreva aqui nos comentários! 👇
#JavaScript #FetchAPI #AsyncAwait #Promises #DOM #Frontend #Programação #DesenvolvimentoWeb #API #Bootstrap #Regex #Shorts #RogerioPontesTI