TL;DR
API DigitalOcean memungkinkan Anda mengelola droplet, volume, firewall, load balancer, klaster Kubernetes, dan lainnya. Autentikasi menggunakan token akses pribadi, panggil endpoint api.digitalocean.com/v2, serta tangani batas laju. Untuk pengujian otomatis, gunakan Apidog untuk validasi konfigurasi, uji provisioning infrastruktur, dan dokumentasikan alur kerja otomasi Anda.
Pengantar
DigitalOcean menyederhanakan komputasi awan. Berbeda dengan AWS dan GCP yang menawarkan ratusan layanan, DigitalOcean hanya fokus pada komputasi (droplet), penyimpanan (volume), jaringan (IP mengambang, firewall), Kubernetes terkelola, dan platform aplikasi. API-nya juga simple.
Contoh kasus penggunaan API DigitalOcean:
- Provisioning lingkungan dev otomatis
- Manajemen klaster Kubernetes
- Infrastruktur sebagai kode (IAC) dengan Terraform atau Pulumi
- CI/CD pipeline provisioning
- Penyebaran multi-wilayah
💡 Jika Anda mengotomatiskan infrastruktur, Apidog membantu menguji integrasi API, menyimpan konfigurasi sebagai template reusable, dan kolaborasi provisioning tim.
Autentikasi
Token akses pribadi
- Buka DigitalOcean Dashboard → API → Generate New Token
- Beri nama token dan atur masa berlaku
- Salin dan simpan token Anda
Contoh penggunaan:
curl -X GET "https://api.digitalocean.com/v2/account" \
-H "Authorization: Bearer YOUR_TOKEN"
Format respons
{
"account": {
"droplet_limit": 25,
"email": "you@example.com",
"name": "Your Name",
"uuid": "abc123xyz",
"email_verified": true,
"status": "active"
}
}
Droplet (mesin virtual)
Daftar semua droplet
curl -X GET "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer YOUR_TOKEN"
Buat 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"]
}'
Ukuran populer:
-
s-1vcpu-1gb- 1 vCPU, 1GB RAM ($5/bln) -
s-2vcpu-2gb- 2 vCPU, 2GB RAM ($10/bln) -
s-2vcpu-4gb- 2 vCPU, 4GB RAM ($20/bln) -
s-4vcpu-8gb- 4 vCPU, 8GB RAM ($40/bln)
Wilayah:
-
nyc1,nyc3- New York -
sfo3- San Francisco -
ams3- Amsterdam -
sgp1- Singapura
Dapatkan detail droplet
curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Hapus droplet
curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Tindakan droplet
Reboot:
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"
}'
Ubah ukuran:
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"
}'
Snapshot:
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"
}'
Volume (penyimpanan blok)
Buat 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"
}'
Lampirkan volume ke 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
}'
Daftar volume
curl -X GET "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer YOUR_TOKEN"
Jaringan
Daftar IP mengambang
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN"
Tetapkan IP mengambang
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"
}'
Buat firewall
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]
}'
Penyeimbang beban
Buat penyeimbang beban
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]
}'
Klaster Kubernetes
Buat klaster 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
}
]
}'
Daftar kumpulan node
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
-H "Authorization: Bearer YOUR_TOKEN"
Skalakan kumpulan node
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
}'
Hapus klaster
curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Pengujian dengan Apidog
Penyediaan infrastruktur memerlukan biaya. Uji setiap API sebelum provisioning resource produksi.
1. Penyiapan lingkungan
DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
2. Validasi respons
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. Konsep uji coba
DigitalOcean tidak menyediakan sandbox, namun Anda dapat validasi input:
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)
})
Uji API infrastruktur DigitalOcean dengan Apidog - gratis.
Kesalahan umum dan perbaikan
401 Tidak Sah
Penyebab: Token tidak valid/kedaluwarsa.
Perbaikan: Generate ulang token via dashboard. Pastikan format header Authorization benar.
422 Entitas Tidak Dapat Diproses
Penyebab: Parameter tidak valid (region, size, image, dsb).
Perbaikan: Pastikan value parameter valid sesuai dokumentasi API. Cek:
- Region tidak support size yang diminta
- Image ID tidak ada
- Droplet limit tercapai
429 Terlalu Banyak Permintaan
Penyebab: Rate limit terlampaui (default 2000 request/jam).
Perbaikan: Terapkan exponential 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')
}
Batas droplet tercapai
Penyebab: Akun Anda sudah terlalu banyak droplet
Perbaikan: Hapus droplet tidak terpakai, atau request peningkatan limit ke support.
Alternatif dan perbandingan
| Fitur | DigitalOcean | AWS | GCP |
|---|---|---|---|
| Ukuran droplet | Tetap | Kustom | Kustom |
| Kubernetes | DOKS Terkelola | EKS | GKE |
| Penyimpanan objek | Spaces | S3 | Cloud Storage |
| Penyimpanan blok | Volume | EBS | Persistent Disk |
| Penyeimbang beban | Bawaan | ELB | Cloud Load Balancing |
| Tingkat gratis | Kredit $200 | Terbatas | Kredit $300 |
| Kesederhanaan API | ★★★★★ | ★★☆☆☆ | ★★★☆☆ |
DigitalOcean unggul dalam kesederhanaan. API-nya mudah digunakan dan fokus pada kebutuhan inti, tanpa kompleksitas layanan multi-layer.
Kasus penggunaan dunia nyata
Lingkungan pengembangan:
Contoh: Startup membuat environment dev per branch. Setiap PR trigger API untuk membuat droplet baru. Setelah PR merge, droplet dihapus otomatis. Developer bisa testing di environment mirip produksi tanpa manual setup.
Web server auto scaling:
Aplikasi monitor load. Jika CPU >70%, gunakan API untuk menambah droplet di load balancer. Jika load turun, droplet dihapus. Efisiensi biaya tetap, performa optimal.
Klaster database:
Managed database service menyediakan volume utama dan replika di multi region. API mengatur replikasi, backup schedule, dan failover otomatis.
Kesimpulan
Yang bisa Anda implementasikan:
- Autentikasi via token akses pribadi
- Membuat dan mengelola droplet terprogram
- Manajemen volume untuk storage persisten
- Konfigurasi firewall & load balancer
- Manajemen klaster Kubernetes otomatis
- Pengujian provisioning infrastruktur dengan Apidog sebelum deploy
FAQ
Berapa biaya droplet?
Mulai $5/bulan untuk 1 vCPU/1GB. Cek halaman harga untuk info terbaru. Billing per jam tersedia.
Bisakah saya menggunakan kunci SSH dengan droplet dari API?
Ya. Masukkan sidik jari SSH key di array ssh_keys saat membuat droplet.
Bedanya volume dan Spaces?
Volume = block storage (mount di droplet).
Spaces = object storage (mirip S3).
Volume untuk database, Spaces untuk file.
Bagaimana retrieve kubeconfig Kubernetes?
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
-H "Authorization: Bearer YOUR_TOKEN"
Bisakah resize droplet?
Ya, gunakan action resize. Downgrade perlu shutdown. Upgrade bisa live.
Backup vs snapshot?
Backup = auto weekly/daily, dikelola DigitalOcean.
Snapshot = manual, on-demand.
Berapa lama provisioning droplet?
30–60 detik rata-rata. Bisa lebih lama tergantung region/size.
Terraform support?
Ya, DigitalOcean punya provider resmi. Sangat cocok untuk IAC.

Top comments (0)