Cliente HTTP para TypeScript: as melhores bibliotecas para aplicações web modernas
O TypeScript consolidou-se como a principal linguagem para desenvolvimento frontend e aplicações server-side em Node.js. Uma das tarefas-chave que todo desenvolvedor enfrenta é o envio de requisições HTTP para APIs. A escolha do cliente HTTP correto impacta o desempenho, a legibilidade do código e a facilidade de depuração. Neste artigo, analisaremos as melhores bibliotecas para trabalhar com HTTP em TypeScript, suas características, pontos fortes e forneceremos exemplos práticos de código.
1. Axios — o padrão universal
O Axios continua sendo o cliente HTTP mais popular, tanto para navegador quanto para Node.js. Sua principal vantagem é a rica funcionalidade "pronta para uso": suporte a interceptadores (interceptors), conversão automática de JSON, cancelamento de requisições e proteção contra XSRF.
No TypeScript, o Axios se integra de forma praticamente ideal. Você pode tipar as respostas usando genéricos, tornando o código seguro e previsível.
import axios, { AxiosResponse } from 'axios';
interface User { id: number; name: string; email: string;}
async function fetchUser(id: number): Promise<User> { const response: AxiosResponse<User> = await axios.get<User>(`/api/users/${id}`); return response.data;}
// UsofetchUser(1).then(user => console.log(user.name));Prós: comunidade enorme, muitos exemplos, suporte a progresso de upload, tratamento de erros embutido.
Contras: o tamanho do bundle (~14 KB gzipped) pode ser excessivo para projetos simples.
2. Fetch API — a escolha nativa
A Fetch API, nativa dos navegadores, tornou-se nos últimos anos uma substituta completa do XMLHttpRequest. Para desenvolvedores TypeScript, isso significa ausência de dependências extras. No entanto, o Fetch nativo exige mais trabalho manual: não há lançamento automático de erros para status 4xx/5xx, e para Node.js é necessário um polyfill.
interface Post { userId: number; id: number; title: string; body: string;}
async function getPosts(): Promise<Post[]> { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json() as Promise<Post[]>;}
getPosts().then(posts => console.log(posts[0].title));Prós: tamanho de bundle zero, suporte completo a Streams API, arquitetura baseada em Promise.
Contras: necessidade de verificar manualmente os status de resposta, ausência de timeouts por padrão, dificuldades com cancelamento de requisições (AbortController).
3. Got — ferramenta poderosa para Node.js
A biblioteca Got foi criada especificamente para o ambiente server-side Node.js. Ela oferece recursos avançados: suporte a HTTP/2, mecanismos de retry, cache, trabalho com cookies e proxies. Para TypeScript, o Got fornece uma excelente tipagem.
import got from 'got';
interface ApiResponse { status: string; data: { id: number; value: string; };}
async function fetchData(): Promise<ApiResponse> { const response = await got.get('https://api.example.com/data', { responseType: 'json', retry: { limit: 3 }, timeout: { request: 5000 } }).json<ApiResponse>(); return response;}
fetchData().then(result => console.log(result.data.value));Prós: API rica para cenários complexos, tratamento de erros embutido, suporte a streams, documentação excelente.
Contras: não funciona no navegador, tamanho relativamente grande (~10 KB gzipped), excessivo para requisições GET simples.
4. Ky — leve e moderno
Ky é um cliente HTTP minimalista, construído sobre a Fetch API. Ele resolve os principais problemas do Fetch nativo: adiciona ta
Também na biblioteca
Rate Limiting em JavaScript (Node.js): Guia Completo da Biblioteca express-rate-limit
Trabalho com XML em Swift (iOS/macOS): Foundation e SwiftXML
Análise de HTML em C++: Visão geral das bibliotecas Gumbo, MyHTML e htmlcxx
Cliente Redis para Java: Jedis, Lettuce e Redisson — visão geral e exemplos
Axios — Cliente HTTP para JavaScript (Node.js)