Em resumo
As APIs da DigitalOcean permitem gerenciar droplets, volumes, firewalls, balanceadores de carga, clusters Kubernetes e outros recursos de nuvem de forma eficiente. Para autenticação, utilize tokens de acesso pessoal, interaja com api.digitalocean.com/v2 e monitore os limites de taxa. Você pode testar e validar fluxos de automação e provisionamento usando o Apidog.
Experimente o Apidog hoje mesmo
Introdução
A DigitalOcean foca nos recursos essenciais de nuvem: computação (droplets), armazenamento (volumes), redes (IPs flutuantes, firewalls), Kubernetes gerenciado e plataforma de aplicativos. Sua API é simples e direta.
Principais usos da API da DigitalOcean:
- Configuração automatizada de ambientes de desenvolvimento
- Gerenciamento de clusters Kubernetes
- Infraestrutura como código com Terraform ou Pulumi
- Provisionamento em pipelines CI/CD
- Implantações multi-região
💡 Se você automatiza infraestrutura, o Apidog facilita testar chamadas de API, salvar configurações como modelos reutilizáveis e colaborar no provisionamento.
Autenticação
Tokens de acesso pessoal
- Acesse o painel DigitalOcean → API → Gerar Novo Token.
- Nomeie o token, defina a expiração.
- Copie e armazene em local seguro.
Exemplo de uso:
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 York -
sfo3- São Francisco -
ams3- 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 pode gerar custos. Sempre teste antes de criar recursos em produção.
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
Não há dry run nativo na DigitalOcean, mas você pode validar entradas antes da criação:
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)
})
Utilize o Apidog para testar as APIs da DigitalOcean de forma gratuita.
Erros comuns e correções
401 Não autorizado
Causa: Token inválido ou expirado.
Correção: Gere um novo token no painel. Verifique o cabeçalho de autorização.
422 Entidade Inprocessável
Causa: Parâmetros inválidos (região, tamanho, imagem, etc.).
Correção: Confirme os valores na documentação. Erros comuns:
- Região não suporta o tamanho solicitado
- ID da imagem inexistente
- Limite de droplets atingido
429 Muitas Requisições
Causa: Limite de taxa excedido (padrão: 2000 requisições/hora).
Correção: Implemente um 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('Limite de taxa atingido')
}
Limite de droplets atingido
Causa: Conta possui muitos droplets.
Correção: Remova droplets não utilizados ou solicite 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 é reconhecida pela simplicidade. Sua API é direta, com operações descomplicadas e poucos serviços aninhados.
Casos de uso reais
Ambientes de desenvolvimento: Automatize a criação de ambientes isolados por branch via API. Cada PR cria um droplet com o código da branch e após merge, destrua o ambiente.
Servidores web com auto-escalonamento: Monitore a carga e, ao exceder um limite (ex: 70% de CPU), crie novos droplets e adicione-os ao balanceador. Remova recursos quando a carga cair.
Clusters de banco de dados: Provisione volumes primários/réplicas em múltiplas regiões, configure replicação e automação de backups e failover via API.
Conclusão
Resumo prático do que foi abordado:
- Autenticação via token pessoal
- Criação e gerenciamento programático de droplets
- Uso de volumes para armazenamento persistente
- Configuração de firewalls e balanceadores de carga
- Gerenciamento de clusters Kubernetes
- Teste da infraestrutura com Apidog antes do provisionamento
FAQ
Quanto custa um droplet?
A partir de $5/mês para 1 vCPU/1GB. Veja a página de preços para valores atualizados. Cobrança por hora 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.
Qual a diferença entre volumes e Spaces?
Volumes são blocos para anexar a droplets (bancos de dados, etc). Spaces é armazenamento de objetos (tipo S3).
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, via ação de resize. Downgrade exige desligamento. Upgrade pode ser feito com droplet ligado.
Qual a diferença entre backups e snapshots?
Backups são automáticos (semanais/diários), snapshots são imagens manuais sob demanda.
Quanto tempo leva para criar um droplet?
30-60 segundos em geral. Pode variar por região e tamanho.
Posso usar Terraform com a DigitalOcean?
Sim, existe provedor oficial. Ideal para infraestrutura como código.

Top comments (0)