TL;DR
Các API của DigitalOcean quản lý Droplet, Volume, Tường lửa, Bộ cân bằng tải, cụm Kubernetes và nhiều thứ khác. Xác thực bằng mã thông báo truy cập cá nhân, gọi `api.digitalocean.com/v2`, và xử lý giới hạn tốc độ. Để thử nghiệm, hãy sử dụng Apidog để xác thực cấu hình, kiểm tra việc cung cấp hạ tầng và ghi lại các quy trình tự động hóa của bạn.
Giới thiệu
DigitalOcean đơn giản hóa điện toán đám mây. Trong khi AWS và GCP cung cấp hàng trăm dịch vụ, DigitalOcean tập trung vào những thứ thiết yếu: điện toán (droplets), lưu trữ (volumes), mạng (floating IPs, firewalls), Kubernetes được quản lý và nền tảng ứng dụng. API của nó cũng đơn giản tương tự.
Các nhà phát triển sử dụng API của DigitalOcean cho:
- Tự động tạo môi trường phát triển
- Quản lý cụm Kubernetes
- Hạ tầng dưới dạng mã với Terraform hoặc Pulumi
- Cung cấp hạ tầng cho pipeline CI/CD
- Triển khai đa vùng
Xác thực
Mã thông báo truy cập cá nhân
- Truy cập DigitalOcean Dashboard → API → Generate New Token
- Đặt tên cho mã thông báo và cài đặt thời hạn
- Sao chép và lưu trữ an toàn
Sử dụng mã thông báo:
curl -X GET "https://api.digitalocean.com/v2/account" \
-H "Authorization: Bearer YOUR_TOKEN"
Định dạng phản hồi
{
"account": {
"droplet_limit": 25,
"email": "you@example.com",
"name": "Your Name",
"uuid": "abc123xyz",
"email_verified": true,
"status": "active"
}
}
Droplet (máy ảo)
Liệt kê tất cả các Droplet
curl -X GET "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer YOUR_TOKEN"
Tạo một 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"]
}'
Các kích thước phổ biến:
s-1vcpu-1gb- 1 vCPU, 1GB RAM (5$/tháng)s-2vcpu-2gb- 2 vCPU, 2GB RAM (10$/tháng)s-2vcpu-4gb- 2 vCPU, 4GB RAM (20$/tháng)s-4vcpu-8gb- 4 vCPU, 8GB RAM (40$/tháng)
Các khu vực:
nyc1,nyc3- New Yorksfo3- San Franciscoams3- Amsterdamsgp1- Singapore
Lấy thông tin chi tiết Droplet
curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Xóa một Droplet
curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Các hành động trên Droplet
Khởi động lại:
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"
}'
Thay đổi kích thước:
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"
}'
Ảnh chụp nhanh:
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 (lưu trữ khối)
Tạo một 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"
}'
Gắn Volume vào 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
}'
Liệt kê các Volume
curl -X GET "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer YOUR_TOKEN"
Mạng
Liệt kê các IP Floating
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN"
Gán IP Floating
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"
}'
Tạo tường lửa
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]
}'
Bộ cân bằng tải
Tạo bộ cân bằng tải
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]
}'
Cụm Kubernetes
Tạo một cụm 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
}
]
}'
Liệt kê các nhóm node
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
-H "Authorization: Bearer YOUR_TOKEN"
Mở rộng nhóm 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
}'
Xóa cụm
curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
Kiểm thử với Apidog
Việc cung cấp hạ tầng tốn kém. Hãy kiểm tra kỹ lưỡng trước khi tạo tài nguyên.

1. Thiết lập môi trường
DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
2. Xác thực phản hồi
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. Các khái niệm về chạy thử (Dry run)
DigitalOcean không cung cấp chức năng chạy thử thực sự, nhưng bạn có thể xác thực các đầu vào:
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)
})
Kiểm tra các API hạ tầng của DigitalOcean bằng Apidog - miễn phí
Các lỗi phổ biến và cách khắc phục
401 Không được phép
Nguyên nhân: Mã thông báo không hợp lệ hoặc đã hết hạn.
Khắc phục: Tạo lại mã thông báo của bạn từ bảng điều khiển. Kiểm tra định dạng tiêu đề Authorization.
422 Không thể xử lý thực thể
Nguyên nhân: Các tham số không hợp lệ (sai khu vực, kích thước, hình ảnh, v.v.).
Khắc phục: Kiểm tra tài liệu API của DigitalOcean để biết các giá trị hợp lệ. Các vấn đề phổ biến:
- Khu vực không hỗ trợ kích thước yêu cầu
- ID hình ảnh không tồn tại
- Đã đạt đến giới hạn Droplet
429 Quá nhiều yêu cầu
Nguyên nhân: Vượt quá giới hạn tốc độ (mặc định 2000 yêu cầu/giờ).
Khắc phục: Thực hiện chiến lược "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')
}
Đã đạt đến giới hạn Droplet
Nguyên nhân: Tài khoản có quá nhiều Droplet.
Khắc phục: Xóa các Droplet không sử dụng hoặc yêu cầu tăng giới hạn từ bộ phận hỗ trợ.
Các lựa chọn thay thế và so sánh
| Tính năng | DigitalOcean | AWS | GCP |
|---|---|---|---|
| Kích thước Droplet | Cố định | Tùy chỉnh | Tùy chỉnh |
| Kubernetes | DOKS được quản lý | EKS | GKE |
| Lưu trữ đối tượng | Spaces | S3 | Cloud Storage |
| Lưu trữ khối | Volumes | EBS | Persistent Disk |
| Bộ cân bằng tải | Tích hợp sẵn | ELB | Cloud Load Balancing |
| Gói miễn phí | 200$ tín dụng | Có giới hạn | 300$ tín dụng |
| Đơn giản API | ★★★★★ | ★★☆☆☆ | ★★★☆☆ |
DigitalOcean chiến thắng về sự đơn giản. API rất dễ hiểu và hầu hết các thao tác hoạt động mà không cần xử lý hàng chục dịch vụ lồng nhau.
Các trường hợp sử dụng thực tế
Môi trường phát triển. Một startup tạo các môi trường phát triển biệt lập cho mỗi nhánh. Mỗi PR kích hoạt các lệnh gọi API để tạo một Droplet với mã mới nhất. Sau khi hợp nhất, Droplet sẽ bị hủy. Các nhà phát triển kiểm tra trong môi trường giống sản phẩm mà không cần thiết lập thủ công.
Máy chủ web tự động mở rộng. Một ứng dụng web giám sát tải. Khi CPU vượt quá 70%, API sẽ tạo các Droplet mới và thêm chúng vào bộ cân bằng tải. Khi tải giảm, các Droplet sẽ bị hủy. Chi phí vẫn thấp trong khi hiệu suất vẫn cao.
Cụm cơ sở dữ liệu. Một dịch vụ cơ sở dữ liệu được quản lý cung cấp các Volume chính và bản sao trên các khu vực. API tự động xử lý cấu hình sao chép, lên lịch sao lưu và thiết lập chuyển đổi dự phòng.
Kết luận
Đây là những gì bạn đã học:
- Xác thực bằng mã thông báo truy cập cá nhân
- Tạo và quản lý Droplet theo chương trình
- Làm việc với Volume để lưu trữ liên tục
- Cấu hình tường lửa và bộ cân bằng tải
- Quản lý cụm Kubernetes
- Kiểm tra hạ tầng với Apidog trước khi cung cấp
FAQ
Một Droplet có giá bao nhiêu?Giá bắt đầu từ 5$/tháng cho 1 vCPU/1GB. Kiểm tra trang giá để biết tỷ lệ hiện tại. Có tính phí theo giờ.
Tôi có thể sử dụng khóa SSH với các Droplet được tạo bằng API không?Có. Bao gồm dấu vân tay khóa SSH trong mảng `ssh_keys` khi tạo Droplet.
Sự khác biệt giữa Volume và Spaces là gì?Volume là bộ nhớ khối được gắn vào các Droplet. Spaces là bộ nhớ đối tượng (giống như S3). Sử dụng Volume cho cơ sở dữ liệu, Spaces cho các tệp.
Làm cách nào để lấy cấu hình Kubernetes?
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
-H "Authorization: Bearer YOUR_TOKEN"
Tôi có thể thay đổi kích thước Droplet không?Có, sử dụng hành động thay đổi kích thước. Giảm cấp yêu cầu tắt nguồn. Nâng cấp có thể được thực hiện trong khi đang chạy.
Sự khác biệt giữa sao lưu (backups) và ảnh chụp nhanh (snapshots) là gì?Sao lưu là các bản sao tự động hàng tuần/hàng ngày được quản lý bởi DigitalOcean. Ảnh chụp nhanh là các hình ảnh theo yêu cầu thủ công mà bạn tự tạo.
Mất bao lâu để tạo Droplet?Thông thường 30-60 giây. Một số khu vực và kích thước có thể mất nhiều thời gian hơn.
Tôi có thể sử dụng Terraform với DigitalOcean không?Có. DigitalOcean có một nhà cung cấp Terraform chính thức. Nó rất tuyệt vời cho hạ tầng dưới dạng mã.
