Como Usar APIs DigitalOcean: Guia do Desenvolvedor para Infraestrutura Cloud

Ashley Innocent

Ashley Innocent

24 março 2026

Como Usar APIs DigitalOcean: Guia do Desenvolvedor para Infraestrutura Cloud

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:

💡
Se você está automatizando infraestrutura, o Apidog ajuda a testar chamadas de API, salvar configurações de infraestrutura como modelos reutilizáveis e colaborar com sua equipe em fluxos de trabalho de provisionamento.
button

Autenticação

Tokens de acesso pessoal

  1. Vá para o Painel da DigitalOcean → API → Gerar Novo Token
  2. Nomeie o token e defina a expiração
  3. 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:

Regiões:

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.

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

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:

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:

button

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.

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs