Hướng Dẫn Sử Dụng DigitalOcean API: Cloud Infrastructure Cho Lập Trình Viên

Ashley Innocent

Ashley Innocent

24 tháng 3 2026

Hướng Dẫn Sử Dụng DigitalOcean API: Cloud Infrastructure Cho Lập Trình Viên

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

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:

💡
Nếu bạn đang tự động hóa hạ tầng, Apidog giúp bạn kiểm tra các lệnh gọi API, lưu cấu hình hạ tầng dưới dạng mẫu có thể tái sử dụng và cộng tác với nhóm của bạn trong các quy trình cung cấp.
nút

Xác thực

Mã thông báo truy cập cá nhân

  1. Truy cập DigitalOcean Dashboard → API → Generate New Token
  2. Đặt tên cho mã thông báo và cài đặt thời hạn
  3. 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:

Các khu vực:

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.

Apidog testing infrastructure

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:

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:

nút

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ã.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API