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

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.