DEV Community

Cover image for Como Usar APIs DigitalOcean: Guia do Desenvolvedor para Infraestrutura Cloud
Lucas
Lucas

Posted on • Originally published at apidog.com

Como Usar APIs DigitalOcean: Guia do Desenvolvedor para Infraestrutura Cloud

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

  1. Acesse o painel DigitalOcean → API → Gerar Novo Token.
  2. Nomeie o token, defina a expiração.
  3. Copie e armazene em local seguro.

Exemplo de uso:

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

Formato da resposta

{
  "account": {
    "droplet_limit": 25,
    "email": "voce@exemplo.com",
    "name": "Seu Nome",
    "uuid": "abc123xyz",
    "email_verified": true,
    "status": "active"
  }
}
Enter fullscreen mode Exit fullscreen mode

Droplets (máquinas virtuais)

Listar todos os droplets

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

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"]
  }'
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Excluir um droplet

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

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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
  }'
Enter fullscreen mode Exit fullscreen mode

Listar volumes

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

Redes

Listar IPs flutuantes

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

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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]
  }'
Enter fullscreen mode Exit fullscreen mode

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]
  }'
Enter fullscreen mode Exit fullscreen mode

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
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
  }'
Enter fullscreen mode Exit fullscreen mode

Excluir cluster

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

Testando com Apidog

O provisionamento de infraestrutura pode gerar custos. Sempre teste antes de criar recursos em produção.

Exemplo de testes de ambiente no Apidog

1. Configuração do ambiente

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

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')
})
Enter fullscreen mode Exit fullscreen mode

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)
})
Enter fullscreen mode Exit fullscreen mode

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')
}
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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)