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.
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
- Ve al Panel de DigitalOcean → API → Generar nuevo token.
- Asigna un nombre y define la expiración.
- 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"
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:
-
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"
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"
}'
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"
}'
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 genera costos. Prueba tus flujos antes de crear recursos.
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 "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)
})
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')
}
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"
¿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)