Kısaca
DigitalOcean API'leri, droplet'leri, birimleri, güvenlik duvarlarını, yük dengeleyicileri, Kubernetes kümelerini ve daha fazlasını yönetir. Kişisel erişim belirteçleri ile kimlik doğrulaması yapın, `api.digitalocean.com/v2` adresini çağırın ve hız sınırlarını yönetin. Test etmek için, Apidog'u kullanarak yapılandırmaları doğrulayın, altyapı tedarikini test edin ve otomasyon iş akışlarınızı belgeleyin.
Giriş
DigitalOcean bulut bilişimi basitleştirir. AWS ve GCP yüzlerce hizmet sunarken, DigitalOcean temel unsurlara odaklanır: işlem gücü (droplet'ler), depolama (birimler), ağ (yüzen IP'ler, güvenlik duvarları), yönetilen Kubernetes ve uygulama platformu. API de bu basitliği yansıtır.
Geliştiriciler DigitalOcean API'sini şunlar için kullanır:
- Geliştirme ortamlarını otomatik olarak başlatma
- Kubernetes kümelerini yönetme
- Terraform veya Pulumi ile kod olarak altyapı
- CI/CD işlem hattı tedariki
- Çok bölgeli dağıtımlar
Kimlik Doğrulama
Kişisel erişim belirteçleri
- DigitalOcean Paneli → API → Yeni Belirteç Oluştur'a gidin
- Belirteci adlandırın ve son kullanma tarihini ayarlayın
- Kopyalayın ve güvenli bir şekilde saklayın
Belirteci kullanma:
curl -X GET "https://api.digitalocean.com/v2/account" \
-H "Authorization: Bearer YOUR_TOKEN"
Yanıt biçimi
{
"account": {
"droplet_limit": 25,
"email": "you@example.com",
"name": "Your Name",
"uuid": "abc123xyz",
"email_verified": true,
"status": "active"
}
}
Droplet'ler (sanal makineler)
Tüm droplet'leri listele
curl -X GET "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer YOUR_TOKEN"
Bir droplet oluştur
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"]
}'
Popüler boyutlar:
s-1vcpu-1gb- 1 vCPU, 1GB RAM (aylık 5$)s-2vcpu-2gb- 2 vCPU, 2GB RAM (aylık 10$)s-2vcpu-4gb- 2 vCPU, 4GB RAM (aylık 20$)s-4vcpu-8gb- 4 vCPU, 8GB RAM (aylık 40$)
Bölgeler:
nyc1,nyc3- New Yorksfo3- San Franciscoams3- Amsterdamsgp1- Singapur
Droplet detaylarını al
curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Bir droplet'i sil
curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Droplet eylemleri
Yeniden başlat:
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"
}'
Boyutlandır:
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"
}'
Anlık görüntü:
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"
}'
Birimler (blok depolama)
Bir birim oluştur
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"
}'
Birimi droplet'e ekle
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
}'
Birimleri listele
curl -X GET "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer YOUR_TOKEN"
Ağ Oluşturma
Yüzen IP'leri listele
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN"
Yüzen IP ata
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"
}'
Güvenlik duvarı oluştur
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]
}'
Yük dengeleyiciler
Bir yük dengeleyici oluştur
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]
}'
Kubernetes kümeleri
Bir Kubernetes kümesi oluştur
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
}
]
}'
Düğüm havuzlarını listele
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
-H "Authorization: Bearer YOUR_TOKEN"
Düğüm havuzunu ölçeklendir
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
}'
Kümeyi sil
curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Apidog ile test etme
Altyapı tedariki maliyetlidir. Kaynakları oluşturmadan önce kapsamlı bir şekilde test edin.

1. Ortam kurulumu
DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
2. Yanıtları doğrula
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. Dry run (deneme çalıştırma) kavramları
DigitalOcean gerçek 'dry run' seçenekleri sunmaz, ancak girişleri doğrulayabilirsiniz:
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)
})
DigitalOcean altyapı API'lerini Apidog ile ücretsiz test edin
Sık karşılaşılan hatalar ve çözümler
401 Yetkilendirilmemiş
Neden: Geçersiz veya süresi dolmuş belirteç.
Çözüm: Belirtecinizi panodan yeniden oluşturun. Authorization başlık biçimini kontrol edin.
422 İşlenemeyen Varlık
Neden: Geçersiz parametreler (yanlış bölge, boyut, görsel vb.).
Çözüm: Geçerli değerler için DigitalOcean'ın API belgelerini kontrol edin. Yaygın sorunlar:
- Bölge istenen boyutu desteklemiyor
- Görsel kimliği mevcut değil
- Droplet limitine ulaşıldı
429 Çok Fazla İstek
Neden: Hız limiti aşıldı (varsayılan 2000 istek/saat).
Çözüm: Gecikmeli yeniden deneme uygulayın (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')
}
Droplet limitine ulaşıldı
Neden: Hesapta çok fazla droplet var.
Çözüm: Kullanılmayan droplet'leri silin veya destekten limit artışı talep edin.
Alternatifler ve karşılaştırmalar
| Özellik | DigitalOcean | AWS | GCP |
|---|---|---|---|
| Droplet boyutları | Sabit | Özel | Özel |
| Kubernetes | Yönetilen DOKS | EKS | GKE |
| Nesne depolama | Spaces | S3 | Cloud Storage |
| Blok depolama | Birimler | EBS | Kalıcı Disk |
| Yük dengeleyiciler | Dahili | ELB | Cloud Load Balancing |
| Ücretsiz katman | 200$ kredi | Sınırlı | 300$ kredi |
| API basitliği | ★★★★★ | ★★☆☆☆ | ★★★☆☆ |
DigitalOcean basitlik konusunda öne çıkıyor. API anlaşılır ve çoğu işlem, onlarca iç içe hizmetle uğraşmadan çalışır.
Gerçek dünya kullanım senaryoları
Geliştirme ortamları. Bir başlangıç şirketi, her dal için izole geliştirme ortamları oluşturur. Her PR (Pull Request), en son kodla bir droplet oluşturmak için API çağrılarını tetikler. Birleştirme sonrası, droplet yok edilir. Geliştiriciler, manuel kurulum yapmadan üretim benzeri ortamlarda test yapar.
Otomatik ölçeklenen web sunucuları. Bir web uygulaması yükü izler. CPU %70'i aştığında, API yeni droplet'ler oluşturur ve bunları yük dengeleyiciye ekler. Yük düştüğünde, droplet'ler yok edilir. Maliyetler düşük kalırken performans yüksek seviyede devam eder.
Veritabanı kümeleri. Yönetilen bir veritabanı hizmeti, bölgeler arasında birincil ve replika birimleri sağlar. API, replikasyon yapılandırmasını, yedekleme zamanlamasını ve hata toleransı kurulumunu otomatik olarak yönetir.
Sonuç
İşte öğrendikleriniz:
- Kişisel erişim belirteçleriyle kimlik doğrulama
- Droplet'leri programlı olarak oluşturma ve yönetme
- Kalıcı depolama için birimlerle çalışma
- Güvenlik duvarlarını ve yük dengeleyicileri yapılandırma
- Kubernetes kümelerini yönetme
- Sağlamadan önce Apidog ile altyapıyı test etme
Sıkça Sorulan Sorular
Bir droplet ne kadara mal olur?Fiyatlar 1 vCPU/1GB için aylık 5$'dan başlar. Güncel oranlar için fiyatlandırma sayfasını kontrol edin. Saatlik faturalandırma mevcuttur.
API ile oluşturulan droplet'lerde SSH anahtarları kullanabilir miyim?Evet. Droplet oluştururken SSH anahtarı parmak izini ssh_keys dizisine ekleyin.
Birimler ve Spaces arasındaki fark nedir?Birimler, droplet'lere bağlı blok depolamadır. Spaces ise nesne depolamadır (S3 gibi). Veritabanları için birimleri, dosyalar için Spaces'i kullanın.
Kubernetes yapılandırmasını nasıl alırım?
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
-H "Authorization: Bearer YOUR_TOKEN"
Bir droplet'i yeniden boyutlandırabilir miyim?Evet, yeniden boyutlandırma eylemini kullanın. Sürüm düşürme (downgrade) bir kapatma gerektirir. Sürüm yükseltmeler (upgrade) çalışırken yapılabilir.
Yedeklemeler ve anlık görüntüler arasındaki fark nedir?Yedeklemeler, DigitalOcean tarafından yönetilen otomatik haftalık/günlük kopyalardır. Anlık görüntüler ise sizin oluşturduğunuz manuel, isteğe bağlı görsellerdir.
Droplet'lerin oluşturulması ne kadar sürer?Genellikle 30-60 saniye. Bazı bölgeler ve boyutlar daha uzun sürebilir.
Terraform'u DigitalOcean ile kullanabilir miyim?Evet. DigitalOcean'ın resmi bir Terraform sağlayıcısı var. Kod olarak altyapı için mükemmeldir.
