Da trilha de JavaScript Este conceito ainda não saiu como card do dia. ir para o card de hoje

JavaScript Web Intermediário

fetch e JSON

O fetch é a API moderna do JavaScript para fazer requisições HTTP de forma assíncrona, retornando uma Promise. Ele é a base para consumir APIs e carregar dados em aplicações web. Diferente do antigo XMLHttpRequest, o fetch usa Promises e tem uma sintaxe mais limpa.

Ao receber uma resposta, você precisa verificar o status HTTP (como 200 para sucesso, 404 para não encontrado) e então converter o corpo para um formato utilizável, geralmente JSON. O método response.json() lê o corpo da resposta e o transforma em um objeto JavaScript automaticamente.

Para enviar dados, você pode usar JSON.stringify() para converter um objeto em string JSON antes de enviar no corpo da requisição. E para interpretar uma string JSON recebida, usa-se JSON.parse(). Essas duas funções são essenciais para a comunicação com APIs.

O tratamento de erros é crucial: fetch só rejeita a Promise em caso de falha de rede, não para status HTTP de erro. Portanto, é preciso verificar response.ok ou response.status manualmente e lançar um erro se necessário.

Pontos-chave

  • fetch(url) retorna uma Promise que resolve para um objeto Response.
  • response.json() também retorna uma Promise que resolve para o objeto JavaScript desserializado.
  • Use JSON.stringify() para converter objetos em string JSON antes de enviar.
  • Use JSON.parse() para converter string JSON em objeto JavaScript.
  • fetch não rejeita a Promise para status HTTP de erro; verifique response.ok ou response.status.
fetch_json.js
// Exemplo: buscar dados de uma API pública e tratar erros
async function buscarUsuario(id) {
  try {
    const resposta = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
    // Verifica se o status HTTP indica sucesso (200-299)
    if (!resposta.ok) {
      throw new Error(`Erro HTTP: ${resposta.status}`);
    }
    // Converte o corpo da resposta para objeto JavaScript
    const usuario = await resposta.json();
    console.log('Usuário:', usuario.name);
    console.log('Email:', usuario.email);
  } catch (erro) {
    console.error('Falha na requisição:', erro.message);
  }
}

// Exemplo: enviar dados como JSON
async function criarPost(titulo, corpo) {
  const dados = { title: titulo, body: corpo, userId: 1 };
  try {
    const resposta = await fetch('https://jsonplaceholder.typicode.com/posts', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(dados) // Converte objeto para string JSON
    });
    if (!resposta.ok) throw new Error(`Erro HTTP: ${resposta.status}`);
    const postCriado = await resposta.json();
    console.log('Post criado com ID:', postCriado.id);
  } catch (erro) {
    console.error('Erro ao criar post:', erro.message);
  }
}

// Executa os exemplos
buscarUsuario(1);
criarPost('Título', 'Conteúdo do post');

Exercícios

  1. 1
    Fácil

    Buscando e exibindo um usuário

    Crie uma função buscarUsuario(id) que faz uma requisição GET para https://jsonplaceholder.typicode.com/users/{id} e exibe no console o nome e o email do usuário. Trate erros de status HTTP e falhas de rede.

    Resolver
  2. 2
    Médio

    Enviando dados com POST e JSON

    Crie uma função criarPost(titulo, corpo) que envia uma requisição POST para https://jsonplaceholder.typicode.com/posts com um objeto JSON contendo title, body e userId: 1. Exiba o ID do post criado. Trate erros de status e de rede.

    Resolver
  3. 3
    Desafio

    Buscando múltiplos recursos e tratando erros

    Crie uma função buscarPostsDoUsuario(userId) que busca todos os posts do usuário com ID fornecido em https://jsonplaceholder.typicode.com/posts?userId={userId} e exibe os títulos. Depois, para cada post, busque os comentários em https://jsonplaceholder.typicode.com/posts/{postId}/comments e exiba a contagem de comentários. Use Promise.all para paralelizar as requisições de comentários. Trate erros de status e de rede.

    Resolver

Continue estudando