Axios e Fetch

Frontend SELF PT
Nível 44 , Lição 0
Disponível

5.1 Fetch API

Para fazer requisições HTTP no JavaScript, a gente geralmente usa duas bibliotecas: função fetch embutida e a biblioteca de terceiros Axios. Ambas oferecem maneiras poderosas e flexíveis de interagir com APIs e outros recursos web.

Fetch API — é uma forma embutida nos navegadores para executar requisições HTTP. Ela se baseia em promises e oferece uma abordagem moderna e flexível para lidar com requisições de rede.

Sintaxe de uma simples requisição fetch:

    
      let promise = fetch(url, {method, headers,
        body})
    
  

Principais conceitos do Fetch:

  • fetch(url, options): o método principal para executar requisições HTTP
  • Retorna uma promise que resolve em um objeto Response

Exemplo de uma simples GET request usando Fetch:

JavaScript
    
      fetch('https://jsonplaceholder.typicode.com/posts/1')
        .then(response => {
          if (!response.ok) {
            throw new Error('Erro de rede: resposta inválida do servidor');
          }
          return response.json();
        })
        .then(data => {
          console.log(data);
        })
        .catch(error => {
          console.error('Erro ao executar a requisição: ', error);
        });
    
  

Exemplo de uma POST request usando Fetch:

JavaScript
    
      fetch('https://jsonplaceholder.typicode.com/posts', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          title: 'foo',
          body: 'bar',
          userId: 1
        })
      })
        .then(response => response.json())
        .then(data => {
          console.log(data);
        })
        .catch(error => {
          console.error('Erro ao executar a requisição: ', error);
        });
    
  

Configurações do Fetch

Fetch API permite configurar diversos parâmetros da requisição através do objeto options, como método, headers, corpo da requisição, e outros.

JavaScript
    
      const options = {
        method: 'GET', // ou 'POST', 'PUT', 'DELETE' etc.
        headers: {
          'Content-Type': 'application/json'
        },
        // body: JSON.stringify(data) // usado para requisições POST e PUT
      };

      fetch('https://jsonplaceholder.typicode.com/posts/1', options)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error('Erro ao executar a requisição: ', error));
    
  

5.2 Biblioteca Axios

Axios é uma biblioteca popular para fazer requisições HTTP no JavaScript. Ela oferece um API mais conveniente e funcional comparado ao Fetch API nativo, além de suportar várias funcionalidades adicionais, como conversão automática de JSON, gerenciamento de timeouts, cancelamento de requisições e suporte a navegadores antigos.

Instalação do Axios

Você pode instalar o Axios através do npm ou incluir via CDN.

Instalação via npm:

Terminal
    
      npm install axios
    
  

Conectando no Node.js ou com o uso de bundlers (como Webpack):

JavaScript
    
      // Para CommonJS
      const axios = require('axios');

      // Para módulos ES6
      import axios from 'axios';
    
  

Conectando via CDN no navegador:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  

Sintaxe de uma simples GET request:

    
      let promise = axios.get(url)
    
  

Sintaxe de uma simples POST request:

    
      let promise = axios.post(url, data, config)
    
  

Principais conceitos do Axios:

  • axios(config): método principal para executar requisições HTTP
  • Aceita um objeto de configuração que pode incluir url, method, headers, data e outros parâmetros.
  • Métodos atalho: Axios fornece métodos para cada método HTTP (axios.get, axios.post, axios.put, axios.delete etc.), o que facilita a execução das requisições correspondentes.
  • Promises: todos os métodos do Axios retornam uma Promise que resolve em um objeto de resposta ou é rejeitada em caso de erro.

Sintaxe de uma simples GET request com tratamento de resposta e erros:

JavaScript
    
      axios.get(url)
        .then(response => {
          // Tratamento da resposta de sucesso
        })
        .catch(error => {
          // Tratamento de erro
        });
    
  

Sintaxe de uma simples POST request com tratamento de resposta e erros:

JavaScript
    
      axios.post(url, data, config)
        .then(response => {
          // Tratamento da resposta de sucesso
        })
        .catch(error => {
          // Tratamento de erro
        });
    
  

Exemplo de uma simples GET request usando Axios:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      axios.get('https://jsonplaceholder.typicode.com/posts/1')
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Erro ao executar a requisição: ', error);
        });
    
  

Exemplo de uma POST request usando Axios:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      axios.post('https://jsonplaceholder.typicode.com/posts', {
          title: 'foo',
          body: 'bar',
          userId: 1
        })
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Erro ao executar a requisição: ', error);
        });
    
  

5.3 Configuração do Axios

Configurações do Axios

Axios permite configurar requisições HTTP com o objeto config, que inclui parâmetros como url, method, headers e dados (data). Abaixo está um exemplo básico de configuração de uma requisição:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      const config = {
        method: 'get', // pode ser 'get', 'post', 'put', 'delete' etc.
        url: 'https://jsonplaceholder.typicode.com/posts/1',
        headers: {
          'Content-Type': 'application/json' // Header para indicar o tipo de dados
        },
        // data: JSON.stringify(data) // Usado para requisições POST e PUT para enviar o corpo da requisição
      };

      axios(config)
        .then(response => console.log(response.data))
        .catch(error => console.error('Erro ao executar a requisição: ', error));
    
  

Recursos adicionais do Axios:

  1. Parâmetros de requisição: podem ser passados na URL.
  2. Cancelamento de requisições: com o uso do AbortController.
  3. Timeouts: configuração de tempo de espera para a requisição.

Exemplo de uso de parâmetros de requisição:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      axios.get('https://jsonplaceholder.typicode.com/posts', {
        params: {
          userId: 1 // Parâmetros de requisição são passados através do objeto params
        }
      })
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Erro ao executar a requisição: ', error);
        });
    
  

5.4 Comparação entre Fetch e Axios

Agora vamos dar uma olhada na comparação entre Fetch e Axios em termos de pontos chave:

1. Facilidade de uso:

  • Fetch: fácil de usar para operações básicas, mas exige tratamento adicional para cenários complexos (por exemplo, conversão de JSON, tratamento de timeouts).
  • Axios: oferece um API mais conveniente e poderoso para tratar requisições complexas.

2. Suporte a JSON:

  • Fetch: exige chamada explícita do response.json() para converter o corpo da resposta em JSON.
  • Axios: automaticamente converte respostas JSON.

3. Timeouts:

  • Fetch: não tem suporte nativo a timeouts. Para implementar um timeout, é necessário usar AbortController ou wrappers.
  • Axios: suporta configuração de timeouts via configuração.

4. Interceptadores:

  • Fetch: não suporta interceptadores de requisição e resposta.
  • Axios: permite o uso de interceptadores para realizar lógica antes e depois de enviar a requisição.

Exemplo com interceptadores no Axios

Interceptors permitem realizar ações específicas antes do envio de uma requisição ou após o recebimento de uma resposta:

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      // Adicionando interceptador para requisições
      axios.interceptors.request.use(config => {
        console.log('Requisição enviada ao servidor: ', new Date());
        return config;
      }, error => {
        return Promise.reject(error);
      });

      // Adicionando interceptador para respostas
      axios.interceptors.response.use(response => {
        console.log('Resposta recebida do servidor: ', new Date());
        return response;
      }, error => {
        return Promise.reject(error);
      });

      // Exemplo de requisição com interceptadores
      axios.get('https://jsonplaceholder.typicode.com/todos/1')
        .then(response => console.log(response.data))
        .catch(error => console.error('Erro ao executar a requisição: ', error));
    
  

Requisições paralelas usando Axios

Com o Axios, você pode facilmente executar requisições em paralelo e lidar com os resultados usando Promise.all():

HTML
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  
JavaScript
    
      Promise.all([
        axios.get('https://jsonplaceholder.typicode.com/todos/1'),
        axios.get('https://jsonplaceholder.typicode.com/todos/2')
      ])
      .then(responses => {
        responses.forEach(response => {
          console.log(response.data);
        });
      })
      .catch(error => console.error('Erro ao executar a requisição: ', error));
    
  
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION