Em resumo
As APIs da DigitalOcean gerenciam droplets, volumes, firewalls, balanceadores de carga, clusters Kubernetes e muito mais. Autentique-se com tokens de acesso pessoal, chame api.digitalocean.com/v2 e lide com os limites de taxa. Para testar, use o Apidog para validar configurações, testar o provisionamento de infraestrutura e documentar seus fluxos de trabalho de automação.
Introdução
A DigitalOcean simplifica a computação em nuvem. Enquanto AWS e GCP oferecem centenas de serviços, a DigitalOcean se concentra no essencial: computação (droplets), armazenamento (volumes), redes (IPs flutuantes, firewalls), Kubernetes gerenciado e plataforma de aplicativos. A API corresponde a essa simplicidade.
Desenvolvedores usam a API da DigitalOcean para:
- Configurar ambientes de desenvolvimento automaticamente
- Gerenciar clusters Kubernetes
- Infraestrutura como código com Terraform ou Pulumi
- Provisionamento de pipeline CI/CD
- Implantações multi-região
Autenticação
Tokens de acesso pessoal
- Vá para o Painel da DigitalOcean → API → Gerar Novo Token
- Nomeie o token e defina a expiração
- Copie e armazene com segurança
Usando o token:
curl -X GET "https://api.digitalocean.com/v2/account" \
-H "Authorization: Bearer SEU_TOKEN"
Formato da resposta
{
"account": {
"droplet_limit": 25,
"email": "voce@exemplo.com",
"name": "Seu Nome",
"uuid": "abc123xyz",
"email_verified": true,
"status": "active"
}
}
Droplets (máquinas virtuais)
Listar todos os droplets
curl -X GET "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer SEU_TOKEN"
Criar um droplet
curl -X POST "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "meu-droplet",
"region": "nyc1",
"size": "s-2vcpu-4gb",
"image": "ubuntu-20-04-x64",
"ssh_keys": ["ssh-rsa AAAA..."],
"backups": false,
"ipv6": true,
"tags": ["web", "producao"]
}'
Tamanhos populares:
s-1vcpu-1gb- 1 vCPU, 1GB RAM ($5/mês)s-2vcpu-2gb- 2 vCPU, 2GB RAM ($10/mês)s-2vcpu-4gb- 2 vCPU, 4GB RAM ($20/mês)s-4vcpu-8gb- 4 vCPU, 8GB RAM ($40/mês)
Regiões:
nyc1,nyc3- Nova Yorksfo3- São Franciscoams3- Amsterdãsgp1- Singapura
Obter detalhes do droplet
curl -X GET "https://api.digitalocean.com/v2/droplets/ID_DO_DROPLET" \
-H "Authorization: Bearer SEU_TOKEN"
Excluir um droplet
curl -X DELETE "https://api.digitalocean.com/v2/droplets/ID_DO_DROPLET" \
-H "Authorization: Bearer SEU_TOKEN"
Ações de droplet
Reiniciar:
curl -X POST "https://api.digitalocean.com/v2/droplets/ID_DO_DROPLET/actions" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "reboot"
}'
Redimensionar:
curl -X POST "https://api.digitalocean.com/v2/droplets/ID_DO_DROPLET/actions" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "resize",
"size": "s-4vcpu-8gb"
}'
Snapshot:
curl -X POST "https://api.digitalocean.com/v2/droplets/ID_DO_DROPLET/actions" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "snapshot",
"name": "meu-snapshot"
}'
Volumes (armazenamento em bloco)
Criar um volume
curl -X POST "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"size_gigabytes": 100,
"name": "meu-volume",
"region": "nyc1",
"description": "Volume de dados para servidores web"
}'
Anexar volume a um droplet
curl -X POST "https://api.digitalocean.com/v2/volumes/ID_DO_VOLUME/actions" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "attach",
"droplet_id": ID_DO_DROPLET
}'
Listar volumes
curl -X GET "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer SEU_TOKEN"
Redes
Listar IPs flutuantes
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer SEU_TOKEN"
Atribuir IP flutuante
curl -X POST "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"droplet_id": ID_DO_DROPLET,
"region": "nyc1"
}'
Criar firewall
curl -X POST "https://api.digitalocean.com/v2/firewalls" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "firewall-web",
"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": ["seu-ip/32"]
}
}
],
"outbound_rules": [
{
"protocol": "tcp",
"ports": "80",
"destinations": {
"addresses": ["0.0.0.0/0"]
}
}
],
"droplet_ids": [ID_DO_DROPLET]
}'
Balanceadores de carga
Criar um balanceador de carga
curl -X POST "https://api.digitalocean.com/v2/load_balancers" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "meu-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": [ID_DO_DROPLET_1, ID_DO_DROPLET_2]
}'
Clusters Kubernetes
Criar um cluster Kubernetes
curl -X POST "https://api.digitalocean.com/v2/kubernetes/clusters" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "meu-cluster",
"region": "nyc1",
"version": "1.28",
"node_pools": [
{
"name": "pool-de-workers",
"size": "s-2vcpu-4gb",
"count": 3,
"auto_scale": true,
"min_nodes": 2,
"max_nodes": 6
}
]
}'
Listar pools de nós
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/ID_DO_CLUSTER/node_pools" \
-H "Authorization: Bearer SEU_TOKEN"
Escalar pool de nós
curl -X PUT "https://api.digitalocean.com/v2/kubernetes/clusters/ID_DO_CLUSTER/node_pools/ID_DO_POOL" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"count": 5
}'
Excluir cluster
curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/ID_DO_CLUSTER" \
-H "Authorization: Bearer SEU_TOKEN"
Testando com Apidog
O provisionamento de infraestrutura é caro. Teste exaustivamente antes de criar recursos.

1. Configuração do ambiente
DIGITALOCEAN_TOKEN: seu_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
2. Validar respostas
pm.test('Droplet criado com sucesso', () => {
const response = pm.response.json()
pm.expect(response.droplet).to.have.property('id')
pm.expect(response.droplet.status).to.eql('new')
})
pm.test('Token é válido', () => {
const response = pm.response.json()
pm.expect(response.account).to.exist
pm.expect(response.account.status).to.eql('active')
})
3. Conceitos de dry run
A DigitalOcean não oferece dry runs verdadeiros, mas você pode validar as entradas:
const validRegions = ['nyc1', 'sfo3', 'ams3', 'sgp1']
const validSizes = ['s-1vcpu-1gb', 's-2vcpu-2gb', 's-2vcpu-4gb']
pm.test('Região é válida', () => {
const requestBody = JSON.parse(pm.request.body.raw)
pm.expect(validRegions).to.include(requestBody.region)
})
pm.test('Tamanho é válido', () => {
const requestBody = JSON.parse(pm.request.body.raw)
pm.expect(validSizes).to.include(requestBody.size)
})
Teste as APIs de infraestrutura da DigitalOcean com Apidog - grátis
Erros comuns e correções
401 Não autorizado
Causa: Token inválido ou expirado.
Correção: Regere seu token no painel. Verifique o formato do cabeçalho de Autorização.
422 Entidade Inprocessável
Causa: Parâmetros inválidos (região, tamanho, imagem errados, etc.).
Correção: Verifique a documentação da API da DigitalOcean para valores válidos. Problemas comuns:
- A região não suporta o tamanho solicitado
- O ID da imagem não existe
- Limite de droplets atingido
429 Muitas Requisições
Causa: Limite de taxa excedido (padrão 2000 requisições/hora).
Correção: Implemente um 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('Limite de taxa atingido')
}
Limite de droplets atingido
Causa: A conta possui muitos droplets.
Correção: Exclua droplets não utilizados ou solicite um aumento de limite ao suporte.
Alternativas e comparações
| Característica | DigitalOcean | AWS | GCP |
|---|---|---|---|
| Tamanhos de Droplet | Fixos | Personalizados | Personalizados |
| Kubernetes | DOKS Gerenciado | EKS | GKE |
| Armazenamento de objetos | Spaces | S3 | Cloud Storage |
| Armazenamento em bloco | Volumes | EBS | Persistent Disk |
| Balanceadores de carga | Integrado | ELB | Cloud Load Balancing |
| Nível gratuito | Crédito de $200 | Limitado | Crédito de $300 |
| Simplicidade da API | ★★★★★ | ★★☆☆☆ | ★★★☆☆ |
A DigitalOcean se destaca pela simplicidade. A API é direta, e a maioria das operações funciona sem lidar com dezenas de serviços aninhados.
Casos de uso reais
Ambientes de desenvolvimento. Uma startup cria ambientes de desenvolvimento isolados por branch. Cada PR aciona chamadas de API para criar um droplet com o código mais recente. Após a fusão, o droplet é destruído. Desenvolvedores testam em ambientes semelhantes à produção sem configuração manual.
Servidores web com auto-escalonamento. Um aplicativo web monitora a carga. Quando a CPU excede 70%, a API cria novos droplets e os adiciona ao balanceador de carga. Quando a carga diminui, os droplets são destruídos. Os custos permanecem baixos enquanto o desempenho se mantém alto.
Clusters de banco de dados. Um serviço de banco de dados gerenciado provisiona volumes primários e de réplica em várias regiões. A API lida automaticamente com a configuração de replicação, agendamento de backup e configuração de failover.
Conclusão
Aqui está o que você aprendeu:
- Autenticar com tokens de acesso pessoal
- Criar e gerenciar droplets programaticamente
- Trabalhar com volumes para armazenamento persistente
- Configurar firewalls e balanceadores de carga
- Gerenciar clusters Kubernetes
- Testar a infraestrutura com Apidog antes do provisionamento
FAQ
Quanto custa um droplet?Os preços começam em $5/mês para 1 vCPU/1GB. Verifique a página de preços para as taxas atuais. A cobrança por hora está disponível.
Posso usar chaves SSH com droplets criados via API?Sim. Inclua a impressão digital da chave SSH no array ssh_keys ao criar droplets.
Qual a diferença entre volumes e Spaces?Volumes são armazenamento em bloco anexados a droplets. Spaces são armazenamento de objetos (como S3). Use volumes para bancos de dados, Spaces para arquivos.
Como obtenho a configuração do Kubernetes?
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/ID_DO_CLUSTER/kubeconfig" \
-H "Authorization: Bearer SEU_TOKEN"
Posso redimensionar um droplet?Sim, use a ação de redimensionamento. Downgrades exigem desligamento. Upgrades podem ser feitos enquanto o droplet está em execução.
Qual a diferença entre backups e snapshots?Backups são cópias automáticas semanais/diárias gerenciadas pela DigitalOcean. Snapshots são imagens manuais sob demanda que você cria.
Quanto tempo leva para criar um droplet?Geralmente 30-60 segundos. Algumas regiões e tamanhos podem levar mais tempo.
Posso usar Terraform com a DigitalOcean?Sim. A DigitalOcean possui um provedor oficial de Terraform. É excelente para infraestrutura como código.
