Introducción
Para desarrolladores que viven en la terminal, las herramientas de testing de API en línea de comandos son indispensables. Las dos herramientas dominantes en este espacio—cURL y HTTPie—sirven propósitos similares pero con filosofías vastamente diferentes. cURL es el veterano navaja suiza disponible en virtualmente cada sistema, mientras que HTTPie es la alternativa moderna y amigable diseñada para la felicidad del desarrollador.
Mientras que herramientas gráficas como Insomnia proporcionan interfaces intuitivas para explorar APIs, las herramientas de línea de comandos sobresalen en automatización y flujos de scripting.
cURL: El Estándar Universal
Sintaxis Básica
GET Request
curl https://api.example.com/users
POST Request
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"John","email":"john@example.com"}'
Con Headers
curl -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
https://api.example.com/profile
Características Avanzadas de cURL
Seguir Redirects
curl -L https://api.example.com/redirect
Modo Verbose (Debugging)
curl -v https://api.example.com/users
Subir Archivo
curl -F "file=@document.pdf" https://api.example.com/upload
Autenticación
# Basic Auth
curl -u username:password https://api.example.com/secure
# Bearer Token
curl -H "Authorization: Bearer $TOKEN" https://api.example.com/api
HTTPie: La Alternativa Amigable
Sintaxis Básica
GET Request
http GET https://api.example.com/users
# o simplemente:
http https://api.example.com/users
POST Request
http POST https://api.example.com/users name=John email=john@example.com
Con Headers
http https://api.example.com/profile \
Authorization:"Bearer token123" \
Accept:application/json
Características Avanzadas de HTTPie
Sintaxis JSON Sugar
# Pares clave-valor simples se convierten en JSON
http POST https://api.example.com/users \
name=John \
age:=30 \
active:=true \
tags:='["developer","qa"]'
Sesiones
# Crear sesión
http --session=user1 POST https://api.example.com/login \
username=john password=secret
# Reusar sesión (cookies, headers preservados)
http --session=user1 GET https://api.example.com/profile
Comparación Lado a Lado
Comparación de Sintaxis
Tarea | cURL | HTTPie |
---|---|---|
GET | curl https://api.com/users | http GET https://api.com/users |
POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"name":"John"}' https://api.com/users | http POST https://api.com/users name=John |
Headers | curl -H "Auth: token" https://api.com | http https://api.com Auth:token |
Query Params | curl "https://api.com/search?q=test&page=1" | http GET https://api.com/search q==test page==1 |
Ejemplo Real: Crear Usuario
cURL
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer abc123" \
-d '{
"name": "Jane Doe",
"email": "jane@example.com",
"age": 28,
"active": true
}'
HTTPie
http POST https://api.example.com/users \
Authorization:"Bearer abc123" \
name="Jane Doe" \
email=jane@example.com \
age:=28 \
active:=true
Scripting y Automatización
Las herramientas de línea de comandos son componentes esenciales de una estrategia completa de testing de API, particularmente para flujos de automatización e integración continua.
Scripts Bash con cURL
#!/bin/bash
API_BASE="https://api.example.com"
TOKEN="your-api-token"
# Hacer request autenticado
curl -X GET "$API_BASE/users" \
-H "Authorization: Bearer $TOKEN"
Scripts Bash con HTTPie
#!/bin/bash
API_BASE="https://api.example.com"
TOKEN=$(http POST "$API_BASE/auth/login" \
username=admin password=secret | \
jq -r '.access_token')
http GET "$API_BASE/users" "Authorization:Bearer $TOKEN"
Integración CI/CD
GitHub Actions con cURL
name: API Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Test API Health
run: |
curl -X GET https://api.example.com/health --fail-with-body
Mejores Prácticas
Manejo de Errores
cURL
# Verificar código de estado HTTP
http_code=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
if [ "$http_code" -ne 200 ]; then
echo "Request falló con status $http_code"
exit 1
fi
# Fallar en errores HTTP
curl --fail-with-body "$URL"
HTTPie
# Salir con error en estados HTTP de error
http --check-status GET https://api.example.com/users
Cuándo Usar Cada Una
Usar cURL Cuando:
- ✓ Máxima compatibilidad requerida
- ✓ Scripting para sistemas de producción
- ✓ Dependencias mínimas necesarias
- ✓ Rendimiento es crítico
Usar HTTPie Cuando:
- ✓ Exploración interactiva de API
- ✓ Experiencia de desarrollador importa
- ✓ Trabajando principalmente con APIs JSON
- ✓ Legibilidad de scripts importante
Conclusión
Tanto cURL como HTTPie son herramientas excelentes con fortalezas diferentes:
cURL: Universal, rápido, ubicuo, potente HTTPie: Moderno, legible, amigable, enfocado en JSON
Para la mayoría de desarrolladores, la configuración ideal es:
- HTTPie para testing interactivo diario de API
- cURL para scripts y automatización donde la portabilidad importa
Al comparar diferentes herramientas de testing de API en 2025, las opciones de línea de comandos como cURL y HTTPie siguen siendo esenciales junto con alternativas modernas como REST Assured para automatización basada en Java.