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

Ashley Innocent

Ashley Innocent

24 March 2026

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

Apidog para empresas

Despliegue local

SSO & RBAC

Conforme con SOC 2

Explorar Apidog Enterprise

TL;DR

Las API de DigitalOcean gestionan droplets, volúmenes, firewalls, balanceadores de carga, clústeres de Kubernetes y más. Autentícate con tokens de acceso personal, llama a api.digitalocean.com/v2 y gestiona los límites de tasa. Para realizar pruebas, usa Apidog para validar configuraciones, probar el aprovisionamiento de infraestructura y documentar tus flujos de trabajo de automatización.

Introducción

DigitalOcean simplifica la computación en la nube. Mientras que 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 coincide con esta simplicidad.

Los desarrolladores utilizan la API de DigitalOcean para:

💡
Si estás automatizando la infraestructura, Apidog te ayuda a probar llamadas a la API, guardar configuraciones de infraestructura como plantillas reutilizables y colaborar con tu equipo en los flujos de trabajo de aprovisionamiento.
button

Autenticación

Tokens de acceso personal

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

Usando el token:

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

Formato de respuesta

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

Droplets (máquinas virtuales)

Listar todos los droplets

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

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"]
  }'

Tamaños populares:

Regiones:

Obtener detalles del droplet

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

Eliminar un droplet

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

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"
  }'

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"
  }'

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"
  }'

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"
  }'

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
  }'

Listar volúmenes

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

Redes

Listar IPs flotantes

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

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"
  }'

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]
  }'

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]
  }'

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
      }
    ]
  }'

Listar pools de nodos

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

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
  }'

Eliminar clúster

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

Probando con Apidog

El aprovisionamiento de infraestructura es costoso. Prueba a fondo 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

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')
})

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

DigitalOcean no ofrece ejecuciones en seco reales, pero puedes validar las entradas:

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)
})

Prueba las API de infraestructura de DigitalOcean con Apidog - gratis

Errores comunes y soluciones

401 No autorizado

Causa: Token inválido o expirado.

Solución: Regenera tu token desde el panel. Verifica el formato del encabezado de Autorización.

422 Entidad no procesable

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

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

429 Demasiadas solicitudes

Causa: Se excedió el límite de tasa (predeterminado 2000 solicitudes/hora).

Solución: Implementa una estrategia de retroceso (backoff):

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')
}

Límite de droplets alcanzado

Causa: La cuenta tiene demasiados droplets.

Solución: Elimina droplets no utilizados o solicita un 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 gana en simplicidad. La API es sencilla, y la mayoría de las operaciones funcionan sin tener que lidiar con docenas de servicios anidados.

Casos de uso en el mundo real

Entornos de desarrollo. Una startup crea entornos de desarrollo aislados por rama. Cada PR activa llamadas a la API para crear un droplet con el código más reciente. Después de la fusión, el droplet se destruye. Los desarrolladores prueban en entornos similares a la producción sin configuración manual.

Servidores web con autoescalado. Una aplicación web monitorea la carga. Cuando la CPU excede el 70%, la API crea nuevos droplets y los añade al balanceador de carga. Cuando la carga disminuye, los droplets se destruyen. Los costos se mantienen bajos mientras el rendimiento se mantiene alto.

Clústeres de bases de datos. Un servicio de base de datos gestionada aprovisiona volúmenes primarios y de réplica en diferentes regiones. La API gestiona la configuración de replicación, la programación de copias de seguridad y la configuración de conmutación por error automáticamente.

Conclusión

Esto es lo que has aprendido:

button

Preguntas frecuentes

¿Cuánto cuesta un droplet?Los precios comienzan en $5/mes por 1 vCPU/1GB. Consulta la página de precios para las tarifas actuales. 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 SSH 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 adjunto a los droplets. Spaces son almacenamiento de objetos (como S3). Usa volúmenes para bases de datos, Spaces 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"

¿Puedo redimensionar un droplet?Sí, usa la acción de redimensionar. Las reducciones de tamaño requieren un apagado. Las ampliaciones se pueden hacer mientras está en funcionamiento.

¿Cuál es la diferencia entre copias de seguridad y instantáneas?Las copias de seguridad son copias automáticas semanales/diarias gestionadas por DigitalOcean. Las instantáneas son imágenes manuales bajo demanda que tú creas.

¿Cuánto tiempo tardan en crearse los droplets?Generalmente 30-60 segundos. Algunas regiones y tamaños pueden tardar más.

¿Puedo usar Terraform con DigitalOcean?Sí. DigitalOcean tiene un proveedor oficial de Terraform. Es excelente para la infraestructura como código.

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs