Nos últimos anos surgiram várias formas de fazer requisições HTTP no frontend e no backend. Durante muito tempo o Axios foi a escolha padrão, mas com a chegada do fetch nativo e bibliotecas modernas como Ky, essa decisão começou a mudar.
Nos últimos anos surgiram várias formas de fazer requisições HTTP no frontend e no backend. Durante muito tempo o Axios foi a escolha padrão, mas com a chegada do fetch nativo e bibliotecas modernas como Ky, essa decisão começou a mudar.
Neste artigo vamos ver:
Diferença entre Ky e Axios
Vantagens do Ky
Exemplos comparando os dois
Quando faz sentido usar Axios
Respostas para dúvidas comuns
O Axios é um cliente HTTP muito popular que funciona tanto no browser quanto no Node.js.
Ele usa internamente:
Browser → XMLHttpRequest
Node → módulos http/https
Exemplo:
import axios from 'axios'
const response = await axios.get('/api/users')
console.log(response.data)
Características:
Muito completo
API madura
Suporte a interceptors
Funciona em qualquer ambiente
Mas também:
Bundle maior
Não usa fetch
API mais verbosa
O Ky é um cliente HTTP moderno baseado em Fetch API.
Ele é minimalista, leve e pensado para aplicações modernas.
Exemplo:
import ky from 'ky'
const data = await ky.get('/api/users').json()
console.log(data)
Características:
Muito leve
Baseado em fetch
API moderna
Retry automático
Hooks simples
Melhor para frontend moderno
| Recurso | Axios | Ky |
|---|---|---|
| Base | XMLHttpRequest / http | fetch |
| Bundle | maior | muito menor |
| API | mais verbosa | minimalista |
| Retry | manual | nativo |
| Timeout | sim | sim |
| Interceptor | completo | hooks |
| Progress | sim | não |
| Node.js | excelente | ok (Node 18+) |
| Front moderno | ok | excelente |
Axios
const res = await axios.get('/api/users')
const data = res.data
Ky
const data = await ky.get('/api/users').json()
Axios
await axios.post('/api/users', {
name: 'John'
})
Ky
await ky.post('/api/users', {
json: {
name: 'John'
}
})
Axios
await axios.get('/api', {
headers: {
Authorization: token
}
})
Ky
await ky.get('/api', {
headers: {
Authorization: token
}
})
Axios
const api = axios.create({
baseURL: '/api'
})
Ky
const api = ky.create({
prefixUrl: '/api'
})
Ky ≈ ~4kb
Axios ≈ ~30kb+
Em frontend moderno isso faz diferença.
Hoje navegadores e Node já suportam fetch.
Então o Ky não precisa reinventar a roda.
Axios
response.data
Ky
.json()
Mais explícito e moderno.
Ky
ky.get('/api', { retry: 3 })
Axios precisa plugin.
const api = ky.create({
hooks: {
beforeRequest: [
req => {
req.headers.set('Authorization', token)
}
]
}
})
React
Next.js
Vue
Vite
Node 18+
Cloudflare
Edge
Deno
Todos já usam fetch.
No Axios os erros são mais estruturados:
error.response
error.request
error.config
Isso facilita debug.
No Ky, o erro é baseado no fetch:
HTTPError
TimeoutError
AbortError
Exemplo:
try {
await ky.get('/api').json()
} catch (error) {
if (error.name === 'HTTPError') {
const body = await error.response.json()
}
}
Ou seja:
Axios → mais detalhado
Ky → mais simples, mas suficiente
Para projetos modernos, o padrão fetch costuma ser suficiente.
Essa é uma ótima pergunta.
Hoje muitos projetos não precisam mais de Axios.
Se o projeto usa:
Node 18+
Next.js 13+
React moderno
Browser moderno
Você já tem fetch.
Então adicionar Axios pode ser desnecessário.
Motivos para ainda usar Axios:
suporte a Node antigo
interceptors complexos
progresso upload/download
libs antigas dependem
backend pesado
Mas em projetos novos, muitas vezes faz mais sentido:
fetch puro
ou
Ky
Porque o fetch é muito básico.
Ky adiciona:
retry
timeout
hooks
json automático
prefixUrl
melhor ergonomia
Sem adicionar peso.
Exemplo fetch puro:
const res = await fetch('/api/users')
const data = await res.json()
Com Ky:
const data = await ky.get('users').json()
Menos código
mais recursos
mesmo runtime
Axios continua sendo excelente.
Mas para projetos modernos, o Ky é muitas vezes uma escolha melhor:
mais leve
mais simples
usa fetch
menos dependência
melhor para frontend moderno
Se você está começando um projeto hoje, vale considerar seriamente usar Ky ou fetch antes de adicionar Axios.