DEV Community

Cover image for Comment utiliser les APIs DigitalOcean: Guide du développeur pour l'infrastructure cloud
Antoine Laurent
Antoine Laurent

Posted on • Originally published at apidog.com

Comment utiliser les APIs DigitalOcean: Guide du développeur pour l'infrastructure cloud

TL;DR

Les API DigitalOcean permettent de gérer Droplets, volumes, pare-feu, équilibreurs de charge, clusters Kubernetes, etc. Pour automatiser ces opérations : authentifiez-vous avec un jeton d’accès personnel, appelez api.digitalocean.com/v2 et tenez compte des limites de débit. Pour tester et documenter vos workflows, validez vos requêtes via Apidog.

Introduction

DigitalOcean simplifie le cloud computing. Contrairement à AWS et GCP qui offrent des centaines de services, DigitalOcean se concentre sur l’essentiel : calcul (droplets), stockage (volumes), réseau (IP flottantes, pare-feu), Kubernetes managé et plateforme d’applications. Son API reflète cette simplicité.

Essayez Apidog dès aujourd’hui

Utilisations courantes de l’API DigitalOcean :

  • Déploiement automatisé d’environnements de développement
  • Gestion de clusters Kubernetes
  • Infrastructure as code avec Terraform/Pulumi
  • Provisionnement CI/CD
  • Déploiements multi-régions

💡
Si vous automatisez l'infrastructure, Apidog vous aide à tester les appels d'API, à enregistrer les configurations d'infrastructure en tant que modèles réutilisables et à collaborer avec votre équipe sur les flux de travail de provisionnement.

Authentification

Jetons d’accès personnels

  1. Accédez au Dashboard DigitalOcean → API → Générez un nouveau jeton.
  2. Nommez le jeton et définissez l’expiration.
  3. Copiez et stockez-le en lieu sûr.

Utilisation du jeton :

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

Format de la réponse

{
  "account": {
    "droplet_limit": 25,
    "email": "you@example.com",
    "name": "Your Name",
    "uuid": "abc123xyz",
    "email_verified": true,
    "status": "active"
  }
}
Enter fullscreen mode Exit fullscreen mode

Droplets (machines virtuelles)

Lister tous les Droplets

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

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

Tailles populaires :

  • s-1vcpu-1gb – 1 vCPU, 1 Go RAM (5 $/mois)
  • s-2vcpu-2gb – 2 vCPU, 2 Go RAM (10 $/mois)
  • s-2vcpu-4gb – 2 vCPU, 4 Go RAM (20 $/mois)
  • s-4vcpu-8gb – 4 vCPU, 8 Go RAM (40 $/mois)

Régions :

  • nyc1, nyc3 – New York
  • sfo3 – San Francisco
  • ams3 – Amsterdam
  • sgp1 – Singapour

Obtenir les détails d’un Droplet

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

Supprimer un Droplet

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

Actions sur les Droplets

Redémarrage :

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

Redimensionner :

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

Instantané :

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

Volumes (stockage par blocs)

Créer un volume

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

Attacher un volume à un 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
  }'
Enter fullscreen mode Exit fullscreen mode

Lister les volumes

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

Réseau

Lister les IPs flottantes

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

Attribuer une IP flottante

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

Créer un pare-feu

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

Équilibreurs de charge

Créer un équilibreur de charge

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

Clusters Kubernetes

Créer un cluster 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
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

Lister les pools de nœuds

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Mettre à l’échelle un pool de nœuds

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

Supprimer le cluster

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

Tests avec Apidog

Le provisionnement d’infrastructure coûte cher. Testez vos appels API avant de créer des ressources.

Apidog test DigitalOcean

1. Configuration de l’environnement

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

2. Valider les réponses

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

3. Concepts de "dry run" (simulation)

DigitalOcean ne propose pas de "dry run" natif, mais validez vos entrées avant appel :

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

Testez gratuitement les API d’infrastructure DigitalOcean avec Apidog.

Erreurs courantes et correctifs

401 Non autorisé

Cause : Jeton invalide ou expiré.

Correctif : Régénérez le jeton dans le dashboard. Vérifiez l’en-tête d’autorisation.

422 Entité non traitable

Cause : Paramètres invalides (région, taille, image…).

Correctif : Consultez la documentation DigitalOcean pour les valeurs valides.

Problèmes courants :

  • Taille non supportée dans la région
  • ID d’image inexistant
  • Limite de Droplets atteinte

429 Trop de requêtes

Cause : Limite de débit dépassée (2000 req/h par défaut).

Correctif : Implémentez un "backoff" exponentiel :

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

Limite de Droplets atteinte

Cause : Trop de Droplets sur le compte.

Correctif : Supprimez les Droplets inutilisés ou demandez une augmentation de limite au support.

Alternatives et comparaisons

Fonctionnalité DigitalOcean AWS GCP
Tailles de Droplets Fixes Personnalisées Personnalisées
Kubernetes DOKS Géré EKS GKE
Stockage objet Spaces S3 Cloud Storage
Stockage par blocs Volumes EBS Persistent Disk
Équilibreurs de charge Intégrés ELB Cloud Load Balancing
Tier gratuit 200 $ de crédit Limité 300 $ de crédit
Simplicité de l'API ★★★★★ ★★☆☆☆ ★★★☆☆

DigitalOcean se distingue par la simplicité : l’API est directe, la plupart des opérations sont immédiates, sans empilement de services.

Cas d’utilisation réels

Environnements de développement.

Automatisez la création de Droplets par branche : chaque PR déclenche la création d’un Droplet avec le code à tester, détruit à la fusion. Les développeurs travaillent dans des environnements semblables à la prod, sans intervention manuelle.

Serveurs web à scalabilité automatique.

Surveillez la charge CPU. Si >70 %, créez de nouveaux Droplets et ajoutez-les à l’équilibreur de charge ; diminuez le nombre si la charge baisse. Coûts maîtrisés, performances assurées.

Clusters de bases de données.

Provisionnez volumes principaux et de réplication dans plusieurs régions. L’API gère la réplication, les sauvegardes et le basculement.

Conclusion

Points clés :

  • Authentification par jeton d’accès personnel
  • Création/gestion de Droplets par API
  • Gestion de volumes pour le stockage persistant
  • Configuration pare-feu et équilibreurs de charge
  • Gestion de clusters Kubernetes
  • Tests d’infrastructure avec Apidog avant provisionnement

FAQ

Combien coûte un Droplet ?

À partir de 5 $/mois pour 1 vCPU/1 Go. Voir la page des tarifs pour les prix actuels. Facturation horaire disponible.

Puis-je utiliser des clés SSH avec les Droplets créés via l’API ?

Oui. Ajoutez l’empreinte SSH dans le tableau ssh_keys lors de la création du Droplet.

Différence entre volumes et Spaces ?

Les volumes = stockage bloc attaché aux Droplets.

Spaces = stockage objet (S3-like).

Utilisez les volumes pour les bases de données, les Spaces pour les fichiers.

Comment obtenir la configuration Kubernetes ?

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Puis-je redimensionner un Droplet ?

Oui. La réduction nécessite un arrêt, l’augmentation peut se faire à chaud.

Différence entre sauvegardes et instantanés ?

Sauvegardes : snapshots automatiques gérés (hebdo/quotidien).

Instantanés : images manuelles, à la demande.

Combien de temps pour créer un Droplet ?

En général 30 à 60 secondes.

Puis-je utiliser Terraform avec DigitalOcean ?

Oui, il existe un provider Terraform officiel. Idéal pour l’infrastructure as code.

Top comments (0)