HTTPie: por qué tu terminal merece algo mejor que curl para probar APIs
Hay vida más allá de curl (y es bastante cómoda)
Si trabajas con APIs, probablemente uses curl todos los días. Y probablemente también hayas copiado y pegado comandos de StackOverflow que parecen conjuros antiguos.
Algo como esto:
curl -X POST https://api.ejemplo.com/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer tu-token-aqui" \
-d '{"name": "Felipe", "email": "[email protected]"}'
Funciona, claro. Pero seamos honestos: no es cómodo, no es legible en el primer vistazo, y si te equivocas en una comilla, vas a sufrir.
Ahí es donde entra HTTPie.
Qué es HTTPie y por qué debería importarte
HTTPie es una herramienta de línea de comandos para hacer peticiones HTTP. Es como curl, pero pensada para humanos.
Sus tres superpoderes son:
- Sintaxis intuitiva: escribes menos y se entiende más
- Output con colores: las respuestas JSON vienen formateadas y legibles
- Defaults inteligentes: asume JSON, parsea headers, hace lo correcto por defecto
Si curl es el veterano que todo lo puede, HTTPie es el colega moderno que te simplifica la vida.
Instalación rápida
macOS (Homebrew)
brew install httpie
Linux (Debian/Ubuntu)
sudo apt install httpie
Windows (pip)
pip install httpie
Una vez instalado, el comando principal es http (así de simple).
Tu primera petición: GET sin dolor
Hacer un GET con HTTPie:
http https://jsonplaceholder.typicode.com/posts/1
Eso es todo. Sin flags, sin -X GET.
El resultado viene coloreado:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat...",
"body": "quia et suscipit..."
}
Compara con curl:
curl https://jsonplaceholder.typicode.com/posts/1
La diferencia no es solo visual, es mental: HTTPie te entrega algo que puedes leer sin parsear mentalmente.
Enviando datos con POST (aquí brilla HTTPie)
Esta es la petición que te mostré arriba en curl. Ahora mira cómo se hace con HTTPie:
http POST https://api.ejemplo.com/users \
name="Felipe" \
email="[email protected]" \
Authorization:"Bearer tu-token-aqui"
Tres cosas pasan aquí:
- No necesitas declarar
Content-Type: application/json: HTTPie lo asume - Los datos se escriben como
key=value: sin necesidad de stringify manual - Los headers se distinguen con
:: limpio y claro
Menos ruido, mismo resultado.
Enviar JSON anidado o arrays
HTTPie usa una sintaxis especial para estructuras complejas:
http POST https://api.ejemplo.com/order \
product:='{"id": 42, "name": "Laptop"}' \
tags:='["tech", "oferta"]'
El operador := le dice a HTTPie: “esto es JSON literal, no un string”.
Agregar headers personalizados
Cualquier header que necesites, lo pasas con la sintaxis Header:valor:
http GET https://api.ejemplo.com/secure \
Authorization:"Bearer abc123" \
X-Custom-Header:"mi-valor"
Y si usas autenticación básica, hay shortcut:
http -a usuario:password https://api.ejemplo.com/private
Descargar archivos
HTTPie puede descargar archivos con --download:
http --download https://ejemplo.com/archivo.zip
Barra de progreso incluida, nombre de archivo detectado automáticamente.
Ver solo los headers (para debuggear)
A veces no te interesa el body, solo los headers de respuesta:
http --headers https://ejemplo.com
Ideal para revisar cachés, cookies, redirects.
HTTPie vs curl: cuándo usar cada uno
Esto es importante porque no se trata de reemplazar curl ciegamente.
Usa HTTPie cuando:
- Estás probando APIs manualmente
- Quieres ver respuestas JSON legibles
- Trabajas rápido y quieres menos typing
- Estás explorando una API nueva
Usa curl cuando:
- Necesitas scripting automatizado
- Quieres total control sobre la petición
- Estás en un servidor sin HTTPie instalado
- El tutorial que sigues usa curl (y no quieres traducir)
En resumen: HTTPie para tu día a día, curl para scripts y compatibilidad universal.
Errores comunes al empezar con HTTPie
1. Olvidar que = es string y := es JSON
Este envía "age": "30" (string):
http POST api.com/user age=30
Este envía "age": 30 (número):
http POST api.com/user age:=30
2. Confundir headers con datos
Headers van con : (sin =):
Authorization:"Bearer token" # header
name="Felipe" # dato
3. Esperar que funcione igual que curl
HTTPie no es un wrapper de curl. Tiene su propia lógica. Si intentas copiar flags de curl directamente, probablemente no funcionen.
Un flujo real: probar un endpoint de login
Supongamos que tienes un endpoint /auth/login que recibe email y password, y retorna un token.
Con HTTPie:
http POST https://api.ejemplo.com/auth/login \
email="[email protected]" \
password="supersegura123"
La respuesta podría ser:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"expiresIn": 3600
}
Ahora usas ese token en otra petición:
http GET https://api.ejemplo.com/me \
Authorization:"Bearer eyJhbGciOiJIUzI1NiIs..."
Todo legible, todo rápido, sin abrir Postman.
Bonus: HTTPie tiene una versión web y desktop
Además del CLI, existe HTTPie App: una interfaz gráfica para los que prefieren algo visual.
Está disponible en httpie.io/app y sincroniza peticiones entre dispositivos. Es como Postman, pero más liviano y con la misma filosofía de simpleza.
Cuando curl te parece más trabajo del necesario, HTTPie está ahí
No se trata de odiar curl. Es una herramienta legendaria y siempre va a estar disponible.
Pero si pasas horas probando APIs, HTTPie te ahorra tiempo, reduce errores y hace que la experiencia sea más agradable.
Es de esas herramientas que una vez que la adoptas, te preguntas cómo vivías sin ella.