TL;DR
Les API DigitalOcean gèrent les Droplets, les volumes, les pare-feu, les équilibreurs de charge, les clusters Kubernetes, et bien plus encore. Authentifiez-vous avec des jetons d'accès personnels, appelez `api.digitalocean.com/v2`, et gérez les limites de débit. Pour les tests, utilisez Apidog pour valider les configurations, tester le provisionnement de l'infrastructure et documenter vos flux de travail d'automatisation.
Introduction
DigitalOcean simplifie le cloud computing. Alors qu'AWS et GCP proposent des centaines de services, DigitalOcean se concentre sur l'essentiel : le calcul (droplets), le stockage (volumes), le réseau (adresses IP flottantes, pare-feu), Kubernetes managé et la plateforme d'applications. L'API reflète cette simplicité.
Les développeurs utilisent l'API de DigitalOcean pour :
- Déployer automatiquement des environnements de développement
- Gérer les clusters Kubernetes
- L'infrastructure en tant que code avec Terraform ou Pulumi
- Le provisionnement de pipelines CI/CD
- Les déploiements multi-régions
Authentification
Jetons d'accès personnels
- Allez dans le Tableau de bord DigitalOcean → API → Générer un nouveau jeton
- Nommez le jeton et définissez l'expiration
- Copiez et stockez en toute sécurité
Utilisation du jeton :
curl -X GET "https://api.digitalocean.com/v2/account" \
-H "Authorization: Bearer YOUR_TOKEN"
Format de la réponse
{
"account": {
"droplet_limit": 25,
"email": "you@example.com",
"name": "Your Name",
"uuid": "abc123xyz",
"email_verified": true,
"status": "active"
}
}
Droplets (machines virtuelles)
Lister tous les Droplets
curl -X GET "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer YOUR_TOKEN"
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"]
}'
Tailles populaires :
s-1vcpu-1gb- 1 vCPU, 1 Go de RAM (5 $/mois)s-2vcpu-2gb- 2 vCPU, 2 Go de RAM (10 $/mois)s-2vcpu-4gb- 2 vCPU, 4 Go de RAM (20 $/mois)s-4vcpu-8gb- 4 vCPU, 8 Go de RAM (40 $/mois)
Régions :
nyc1,nyc3- New Yorksfo3- San Franciscoams3- Amsterdamsgp1- Singapour
Obtenir les détails du Droplet
curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Supprimer un Droplet
curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
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"
}'
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"
}'
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"
}'
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"
}'
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
}'
Lister les volumes
curl -X GET "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer YOUR_TOKEN"
Réseau
Lister les IPs flottantes
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN"
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"
}'
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]
}'
É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]
}'
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
}
]
}'
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"
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
}'
Supprimer le cluster
curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Tests avec Apidog
Le provisionnement d'infrastructure est coûteux. Testez minutieusement avant de créer des ressources.

1. Configuration de l'environnement
DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
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')
})
3. Concepts de "dry run" (simulation)
DigitalOcean n'offre pas de véritables simulations, mais vous pouvez valider les entrées :
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)
})
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 votre jeton depuis le tableau de bord. Vérifiez le format de l'en-tête d'autorisation.
422 Entité non traitable
Cause : Paramètres invalides (mauvaise région, taille, image, etc.).
Correctif : Consultez la documentation de l'API DigitalOcean pour les valeurs valides. Problèmes courants :
- La région ne prend pas en charge la taille demandée
- L'ID d'image n'existe pas
- Limite de Droplets atteinte
429 Trop de requêtes
Cause : Limite de débit dépassée (par défaut 2000 requêtes/heure).
Correctif : Implémentez un mécanisme de "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('Rate limited')
}
Limite de Droplets atteinte
Cause : Le compte a trop de Droplets.
Correctif : Supprimez les Droplets inutilisés ou demandez une augmentation de la 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 l'emporte sur la simplicité. L'API est directe, et la plupart des opérations fonctionnent sans avoir à gérer des dizaines de services imbriqués.
Cas d'utilisation réels
Environnements de développement. Une startup crée des environnements de développement isolés par branche. Chaque PR déclenche des appels d'API pour créer un Droplet avec le dernier code. Après la fusion, le Droplet est détruit. Les développeurs testent dans des environnements similaires à la production sans configuration manuelle.
Serveurs web à mise à l'échelle automatique. Une application web surveille la charge. Lorsque le CPU dépasse 70 %, l'API crée de nouveaux Droplets et les ajoute à l'équilibreur de charge. Lorsque la charge diminue, les Droplets sont détruits. Les coûts restent bas tandis que les performances restent élevées.
Clusters de bases de données. Un service de base de données géré provisionne des volumes primaires et de réplication à travers les régions. L'API gère automatiquement la configuration de la réplication, la planification des sauvegardes et la configuration du basculement.
Conclusion
Voici ce que vous avez appris :
- S'authentifier avec des jetons d'accès personnels
- Créer et gérer des Droplets par programme
- Travailler avec des volumes pour le stockage persistant
- Configurer les pare-feu et les équilibreurs de charge
- Gérer les clusters Kubernetes
- Tester l'infrastructure avec Apidog avant le provisionnement
FAQ
Combien coûte un Droplet ?Les prix commencent à 5 $/mois pour 1 vCPU/1 Go. Consultez la page des tarifs pour les prix actuels. La facturation horaire est disponible.
Puis-je utiliser des clés SSH avec les Droplets créés via l'API ?Oui. Incluez l'empreinte de la clé SSH dans le tableau `ssh_keys` lors de la création des Droplets.
Quelle est la différence entre les volumes et les Spaces ?Les volumes sont du stockage par blocs attaché aux Droplets. Les Spaces sont du stockage objet (comme S3). 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"
Puis-je redimensionner un Droplet ?Oui, utilisez l'action de redimensionnement. Les réductions de taille nécessitent un arrêt. Les augmentations peuvent être effectuées pendant l'exécution.
Quelle est la différence entre les sauvegardes et les instantanés ?Les sauvegardes sont des copies automatiques hebdomadaires/quotidiennes gérées par DigitalOcean. Les instantanés sont des images manuelles à la demande que vous créez.
Combien de temps faut-il pour créer un Droplet ?Généralement 30 à 60 secondes. Certaines régions et tailles peuvent prendre plus de temps.
Puis-je utiliser Terraform avec DigitalOcean ?Oui. DigitalOcean dispose d'un fournisseur Terraform officiel. C'est excellent pour l'infrastructure en tant que code.
