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.

Las herramientas CLI son componentes esenciales de cualquier estrategia de automatización de pruebas, especialmente cuando se integran en pipelines de testing continuo en DevOps. Para dominar el testing de API, combinar herramientas CLI con soluciones como Postman ofrece la máxima flexibilidad.

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

TareacURLHTTPie
GETcurl https://api.com/usershttp GET https://api.com/users
POST JSONcurl -X POST -H "Content-Type: application/json" -d '{"name":"John"}' https://api.com/usershttp POST https://api.com/users name=John
Headerscurl -H "Auth: token" https://api.comhttp https://api.com Auth:token
Query Paramscurl "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.

Ver También

Recursos Oficiales