Revolução no Node.js: adeus ao Axios e fetch API na versão 17.5.0
Introdução
Toda pessoa estudante de programação que se preze já precisou usar bibliotecas (a famosa “lib”) no desenvolvimento de suas aplicações. Um exemplo são as libs Axios e Fetch, muito utilizadas principalmente no front-end e back-end para consumir APIs externas.
Recentemente o Node.JS v17.5 passou por duas mudanças que movimentaram opiniões, então vamos explicar como essa mudança impacta em questões de efetividade e agilidade na produção de código, além de comparar os prós e contras dessa atualização. Vamos lá?
Recordar é viver
Para começar, vamos relembrar como funcionam as libs Axios, Fetch e Node Fetch.
Com uma excelente reputação na comunidade, o Axios é uma lib Javascript muito usada para fazer solicitações HTTP do Node.js ou XMLHttpRequests
através do navegador. Também suporta a API Promise que é nativa do JS ES6, transforma dados em JSON, transforma e intercepta dados de requisições e respostas (request /response). Além de tudo isso, do lado do cliente suporta a proteção contra XSRF.
Na linguagem Javascript, o Axios é uma alternativa ao método fetch(), isso porque ele consegue fazer análise automática de JSON e trabalha muito bem em parceria com o Express, enquanto o Axios envia a solicitação da web, o Express responde essas solicitações.
Em contrapartida, é um pacote externo que você precisa instalar no seu projeto, diferente do Fetch que já vem embutido no browser, consequentemente mais leve que o Axios.
Para quem é do time node-fetch, sabe que terá facilidade e leveza na instalação do módulo. Com um simples npm install node-fetch
você tem os recursos do fetch de forma bem mais direta e sem precisar implementar o XMLHttpRequest
, ou seja, é um atrativo para quem gosta de um código mais limpo e organizado.
Um exemplo do node-fetch utilizando função assíncrona async/await:
const express = require("express");
const fetch = require("node-fetch");
const app = express();
app.get('/', async function(req, res){
const response = await fetch('https://dog.ceo/api/breeds/list/all')
const app = await response.json()
console.log(app)
})
app.listen(3000);
module.export = app
Observe que na aplicação você poderá precisar de frameworks e talvez outras bibliotecas, além do node-fetch, isso pode tornar a aplicação pesada com tantas dependências.
De forma simples, a novidade no ecossistema Node.js é uma forma nativa de implementar o Fetch API sem lib ou instalação de módulos externos.
Vamos conferir como fica no código?
Node e o Fetch nativo na prática
Como já mencionamos, essa nova feature está disponível para a versão v17.5.0 do Node.js. Então se você usa a LTS (Long Team Support, ou em português, versões de longo prazo) ou anterior, vai precisar continuar com a instalação de recursos externos.
Para você que está usando uma versão diferente, uma ótima dica é utilizar o NVM ou Node Version Manager, para baixar diferentes versões do Node.js na sua máquina.
Como eu uso o Fetch API nativo?
Para adicionar um suporte experimental a Fetch API, insira a flag:
--experimental-fetch
Agora você terá o fetch
, Request
, Response
e o Headers
como globais. Depois é só consumir a Fetch API! Aqui vai um exemplo muito simples:
const res = await fetch('https://dog.ceo/api/breeds/list/all');
const json = await res.json();
console.log(json);
Agora é só lançar a requisição que a API externa retorna de forma mais simples!
Conclusão
Há muitas razões para você considerar o uso do fetch() no Node.js, pois além de ser excelente para realizar requisições simples, não precisamos nos preocupar com possíveis alterações em libs externas e consequentemente com comprometimento de nossas aplicações. Contudo é importante lembrar que o Fetch nativo ainda não está disponível para a versão LTS, isso significa que pode haver problemas de versões ou de instabilidade na última versão. Porém, não é nada que comprometa a nova implementação.
O Fetch nativo também tem como referência o undici, o que garante uma melhora significativa na latência e taxa de transferência de arquivos.
E você, o que achou dessa novidade?
Compartilha com a gente no servidor da Alura: Link para o Discord da Alura.
E então, vamos aprender mais?