DEV Community

Cover image for Cómo Usar APIs de DigitalOcean: Guía para Desarrolladores de Infraestructura en la Nube
Roobia
Roobia

Posted on • Originally published at apidog.com

Cómo Usar APIs de DigitalOcean: Guía para Desarrolladores de Infraestructura en la Nube

TL;DR

Las API de DigitalOcean permiten gestionar droplets, volúmenes, firewalls, balanceadores de carga, clústeres de Kubernetes y más. Autentícate usando tokens de acceso personal, haz peticiones a api.digitalocean.com/v2 y controla los límites de tasa. Para pruebas y validación de infraestructura, utiliza Apidog para validar configuraciones, testear aprovisionamiento y documentar tus flujos de automatización.

Prueba Apidog hoy

Introducción

DigitalOcean simplifica la computación en la nube. Mientras AWS y GCP ofrecen cientos de servicios, DigitalOcean se centra en lo esencial: computación (droplets), almacenamiento (volúmenes), redes (IP flotantes, firewalls), Kubernetes gestionado y plataforma de aplicaciones. La API es igual de directa.

Los desarrolladores usan la API de DigitalOcean para:

  • Automatizar entornos de desarrollo
  • Gestionar clústeres de Kubernetes
  • Implementar infraestructura como código (Terraform, Pulumi)
  • Aprovisionar pipelines de CI/CD
  • Realizar despliegues multirregionales

💡 Tip: Si automatizas infraestructura, Apidog te ayuda a probar las llamadas API, guardar configuraciones como plantillas reutilizables y colaborar con tu equipo en aprovisionamiento.

Autenticación

Tokens de acceso personal

  1. Ve al Panel de DigitalOcean → API → Generar nuevo token.
  2. Asigna un nombre y define la expiración.
  3. Copia y almacena el token de forma segura.

Usar el token:

curl -X GET "https://api.digitalocean.com/v2/account" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Formato de respuesta

{
  "account": {
    "droplet_limit": 25,
    "email": "you@example.com",
    "name": "Your Name",
    "uuid": "abc123xyz",
    "email_verified": true,
    "status": "active"
  }
}
Enter fullscreen mode Exit fullscreen mode

Droplets (máquinas virtuales)

Listar todos los droplets

curl -X GET "https://api.digitalocean.com/v2/droplets" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Crear un droplet

curl -X POST "https://api.digitalocean.com/v2/droplets" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-droplet",
    "region": "nyc1",
    "size": "s-2vcpu-4gb",
    "image": "ubuntu-20-04-x64",
    "ssh_keys": ["ssh-rsa AAAA..."],
    "backups": false,
    "ipv6": true,
    "tags": ["web", "production"]
  }'
Enter fullscreen mode Exit fullscreen mode

Tamaños populares:

  • s-1vcpu-1gb - 1 vCPU, 1GB RAM ($5/mes)
  • s-2vcpu-2gb - 2 vCPU, 2GB RAM ($10/mes)
  • s-2vcpu-4gb - 2 vCPU, 4GB RAM ($20/mes)
  • s-4vcpu-8gb - 4 vCPU, 8GB RAM ($40/mes)

Regiones:

  • nyc1, nyc3 - Nueva York
  • sfo3 - San Francisco
  • ams3 - Ámsterdam
  • sgp1 - Singapur

Obtener detalles del droplet

curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Eliminar un droplet

curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Acciones de droplet

Reiniciar:

curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "reboot"
  }'
Enter fullscreen mode Exit fullscreen mode

Redimensionar:

curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "resize",
    "size": "s-4vcpu-8gb"
  }'
Enter fullscreen mode Exit fullscreen mode

Crear instantánea:

curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "snapshot",
    "name": "my-snapshot"
  }'
Enter fullscreen mode Exit fullscreen mode

Volúmenes (almacenamiento en bloque)

Crear un volumen

curl -X POST "https://api.digitalocean.com/v2/volumes" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "size_gigabytes": 100,
    "name": "my-volume",
    "region": "nyc1",
    "description": "Data volume for web servers"
  }'
Enter fullscreen mode Exit fullscreen mode

Adjuntar volumen a droplet

curl -X POST "https://api.digitalocean.com/v2/volumes/VOLUME_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "attach",
    "droplet_id": DROPLET_ID
  }'
Enter fullscreen mode Exit fullscreen mode

Listar volúmenes

curl -X GET "https://api.digitalocean.com/v2/volumes" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Redes

Listar IPs flotantes

curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Asignar IP flotante

curl -X POST "https://api.digitalocean.com/v2/floating_ips" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "droplet_id": DROPLET_ID,
    "region": "nyc1"
  }'
Enter fullscreen mode Exit fullscreen mode

Crear firewall

curl -X POST "https://api.digitalocean.com/v2/firewalls" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "web-firewall",
    "inbound_rules": [
      {
        "protocol": "tcp",
        "ports": "80",
        "sources": {
          "addresses": ["0.0.0.0/0"]
        }
      },
      {
        "protocol": "tcp",
        "ports": "443",
        "sources": {
          "addresses": ["0.0.0.0/0"]
        }
      },
      {
        "protocol": "tcp",
        "ports": "22",
        "sources": {
          "addresses": ["your-ip/32"]
        }
      }
    ],
    "outbound_rules": [
      {
        "protocol": "tcp",
        "ports": "80",
        "destinations": {
          "addresses": ["0.0.0.0/0"]
        }
      }
    ],
    "droplet_ids": [DROPLET_ID]
  }'
Enter fullscreen mode Exit fullscreen mode

Balanceadores de carga

Crear un balanceador de carga

curl -X POST "https://api.digitalocean.com/v2/load_balancers" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-lb",
    "region": "nyc1",
    "algorithm": "round_robin",
    "health_check": {
      "protocol": "http",
      "port": 80,
      "path": "/",
      "check_interval_seconds": 10,
      "response_timeout_seconds": 5,
      "healthy_threshold": 3,
      "unhealthy_threshold": 3
    },
    "forwarding_rules": [
      {
        "entry_protocol": "http",
        "entry_port": 80,
        "target_protocol": "http",
        "target_port": 80
      },
      {
        "entry_protocol": "https",
        "entry_port": 443,
        "target_protocol": "https",
        "target_port": 443,
        "tls_passthrough": true
      }
    ],
    "droplet_ids": [DROPLET_ID_1, DROPLET_ID_2]
  }'
Enter fullscreen mode Exit fullscreen mode

Clústeres de Kubernetes

Crear un clúster de Kubernetes

curl -X POST "https://api.digitalocean.com/v2/kubernetes/clusters" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-cluster",
    "region": "nyc1",
    "version": "1.28",
    "node_pools": [
      {
        "name": "worker-pool",
        "size": "s-2vcpu-4gb",
        "count": 3,
        "auto_scale": true,
        "min_nodes": 2,
        "max_nodes": 6
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

Listar pools de nodos

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Escalar pool de nodos

curl -X PUT "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools/POOL_ID" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "count": 5
  }'
Enter fullscreen mode Exit fullscreen mode

Eliminar clúster

curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Probando con Apidog

El aprovisionamiento de infraestructura genera costos. Prueba tus flujos antes de crear recursos.

Apidog's interface with API testing in progress

1. Configuración del entorno

DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
Enter fullscreen mode Exit fullscreen mode

2. Validar respuestas

pm.test('Droplet created successfully', () => {
  const response = pm.response.json()
  pm.expect(response.droplet).to.have.property('id')
  pm.expect(response.droplet.status).to.eql('new')
})

pm.test('Token is valid', () => {
  const response = pm.response.json()
  pm.expect(response.account).to.exist
  pm.expect(response.account.status).to.eql('active')
})
Enter fullscreen mode Exit fullscreen mode

3. Conceptos de "Dry Run" (ejecución en seco)

DigitalOcean no ofrece "dry run", pero puedes validar entradas desde tu entorno de pruebas:

const validRegions = ['nyc1', 'sfo3', 'ams3', 'sgp1']
const validSizes = ['s-1vcpu-1gb', 's-2vcpu-2gb', 's-2vcpu-4gb']

pm.test('Region is valid', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  pm.expect(validRegions).to.include(requestBody.region)
})

pm.test('Size is valid', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  pm.expect(validSizes).to.include(requestBody.size)
})
Enter fullscreen mode Exit fullscreen mode

Prueba gratis las API de DigitalOcean con Apidog.

Errores comunes y soluciones

401 No autorizado

Causa: Token inválido o expirado.

Solución: Regenera el token desde el panel y revisa el formato del encabezado Authorization.

422 Entidad no procesable

Causa: Parámetros inválidos (región, tamaño, imagen, etc.).

Solución: Consulta la documentación oficial de DigitalOcean para valores válidos. Problemas comunes:

  • Región no soporta el tamaño solicitado
  • ID de imagen inexistente
  • Límite de droplets alcanzado

429 Demasiadas solicitudes

Causa: Excediste el límite de tasa (default 2000/hora).

Solución: Implementa backoff exponencial:

async function doRequest(url, options, retries = 3) {
  for (let i = 0; i < retries; i++) {
    const response = await fetch(url, options)
    if (response.status === 429) {
      await sleep(Math.pow(2, i) * 1000)
      continue
    }
    return response
  }
  throw new Error('Rate limited')
}
Enter fullscreen mode Exit fullscreen mode

Límite de droplets alcanzado

Causa: Demasiados droplets en la cuenta.

Solución: Elimina los innecesarios o pide aumento de límite al soporte.

Alternativas y comparaciones

Característica DigitalOcean AWS GCP
Tamaños de droplet Fijos Personalizados Personalizados
Kubernetes DOKS gestionado EKS GKE
Almacenamiento de objetos Spaces S3 Cloud Storage
Almacenamiento en bloque Volúmenes EBS Persistent Disk
Balanceadores de carga Integrados ELB Cloud Load Balancing
Nivel gratuito $200 de crédito Limitado $300 de crédito
Simplicidad de la API ★★★★★ ★★☆☆☆ ★★★☆☆

DigitalOcean destaca por su simplicidad: la API es clara y la mayoría de operaciones no requieren lidiar con múltiples servicios anidados.

Casos de uso en el mundo real

Entornos de desarrollo: Automatiza entornos por rama. Cada PR crea un droplet con el código, y tras el merge, se destruye. Pruebas similares a producción sin intervención manual.

Servidores web con autoescalado: Monitorea la carga y crea/destroza droplets vía API según el tráfico, manteniendo costos bajos y rendimiento alto.

Clústeres de bases de datos: Automatiza volúmenes primarios y réplicas en varias regiones. Configura replicación y backups con la API.

Conclusión

Resumen de pasos prácticos:

  • Autentica usando tokens de acceso personal
  • Crea y gestiona droplets por código
  • Usa volúmenes para almacenamiento persistente
  • Configura firewalls y balanceadores de carga
  • Gestiona clústeres de Kubernetes
  • Valida infraestructura con Apidog antes de aprovisionar

Preguntas frecuentes

¿Cuánto cuesta un droplet?

Desde $5/mes por 1 vCPU/1GB. Consulta precios actualizados en la web. La facturación por horas está disponible.

¿Puedo usar claves SSH con droplets creados por la API?

Sí, incluye la huella digital de la clave en el array ssh_keys al crear droplets.

¿Cuál es la diferencia entre volúmenes y Spaces?

Los volúmenes son almacenamiento en bloque para droplets. Spaces es almacenamiento de objetos, ideal para archivos.

¿Cómo obtengo la configuración de Kubernetes?

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

¿Puedo redimensionar un droplet?

Sí, usa la acción de redimensionar (resize). Para reducir tamaño, apaga el droplet; para aumentar, puede estar encendido.

¿Diferencia entre copias de seguridad e instantáneas?

Backups son automáticos (semanales/diarias). Instantáneas son manuales, bajo demanda.

¿Cuánto tarda en crearse un droplet?

Generalmente 30-60 segundos, dependiendo de región y tamaño.

¿Puedo usar Terraform con DigitalOcean?

Sí, existe proveedor oficial para Terraform, ideal para infraestructura como código.

Top comments (0)