วิธีใช้ DigitalOcean API: คู่มือนักพัฒนาสำหรับโครงสร้างพื้นฐานคลาวด์

Ashley Innocent

Ashley Innocent

24 March 2026

วิธีใช้ DigitalOcean API: คู่มือนักพัฒนาสำหรับโครงสร้างพื้นฐานคลาวด์

สรุปย่อ

API ของ DigitalOcean ใช้จัดการ Droplets, Volumes, Firewalls, Load Balancers, Kubernetes Clusters และอื่นๆ อีกมากมาย คุณสามารถตรวจสอบสิทธิ์ด้วย Personal Access Tokens, เรียกใช้ `api.digitalocean.com/v2` และจัดการกับการจำกัดอัตราการเรียกใช้ (Rate Limits) สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบความถูกต้องของการกำหนดค่า, ทดสอบการจัดเตรียมโครงสร้างพื้นฐาน และจัดทำเอกสารสำหรับเวิร์กโฟลว์การทำงานอัตโนมัติของคุณ

บทนำ

DigitalOcean ทำให้การประมวลผลบนคลาวด์เป็นเรื่องง่าย ในขณะที่ AWS และ GCP นำเสนอบริการหลายร้อยรายการ DigitalOcean มุ่งเน้นไปที่สิ่งจำเป็น: การประมวลผล (droplets), ที่เก็บข้อมูล (volumes), ระบบเครือข่าย (floating IPs, firewalls), Managed Kubernetes และ App Platform API ก็ตรงไปตรงมาเช่นกัน

นักพัฒนาใช้ API ของ DigitalOcean เพื่อ:

💡
หากคุณกำลังทำให้โครงสร้างพื้นฐานเป็นอัตโนมัติ Apidog จะช่วยคุณทดสอบการเรียกใช้ API, บันทึกการกำหนดค่าโครงสร้างพื้นฐานเป็นเทมเพลตที่นำกลับมาใช้ใหม่ได้ และทำงานร่วมกับทีมของคุณในเวิร์กโฟลว์การจัดเตรียม
ปุ่ม

การยืนยันตัวตน

โทเค็นการเข้าถึงส่วนบุคคล (Personal access tokens)

  1. ไปที่ DigitalOcean Dashboard → API → Generate New Token
  2. ตั้งชื่อโทเค็นและกำหนดวันหมดอายุ
  3. คัดลอกและจัดเก็บอย่างปลอดภัย

การใช้โทเค็น:

curl -X GET "https://api.digitalocean.com/v2/account" \
  -H "Authorization: Bearer YOUR_TOKEN"

รูปแบบการตอบกลับ

{
  "account": {
    "droplet_limit": 25,
    "email": "you@example.com",
    "name": "Your Name",
    "uuid": "abc123xyz",
    "email_verified": true,
    "status": "active"
  }
}

Droplets (เครื่องเสมือน)

แสดงรายการ Droplets ทั้งหมด

curl -X GET "https://api.digitalocean.com/v2/droplets" \
  -H "Authorization: Bearer YOUR_TOKEN"

สร้าง 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"]
  }'

ขนาดที่นิยม:

ภูมิภาค:

ดูรายละเอียด Droplet

curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

ลบ Droplet

curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

การดำเนินการกับ Droplet

รีบูต:

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"
  }'

ปรับขนาด:

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"
  }'

สแนปช็อต:

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 (Block Storage)

สร้าง 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"
  }'

แนบ Volume เข้ากับ 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
  }'

แสดงรายการ Volumes

curl -X GET "https://api.digitalocean.com/v2/volumes" \
  -H "Authorization: Bearer YOUR_TOKEN"

ระบบเครือข่าย

แสดงรายการ Floating IP

curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
  -H "Authorization: Bearer YOUR_TOKEN"

กำหนด Floating IP

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"
  }'

สร้าง 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]
  }'

Load Balancers

สร้าง Load Balancer

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

สร้างคลัสเตอร์ 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
      }
    ]
  }'

แสดงรายการ Node Pool

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
  -H "Authorization: Bearer YOUR_TOKEN"

ปรับขนาด Node Pool

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
  }'

ลบคลัสเตอร์

curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

การทดสอบด้วย Apidog

การจัดเตรียมโครงสร้างพื้นฐานมีค่าใช้จ่ายสูง ควรทดสอบอย่างละเอียดก่อนสร้างทรัพยากร

ภาพแสดงหน้าจอของ Apidog สำหรับการทดสอบ API ของ DigitalOcean

1. การตั้งค่าสภาพแวดล้อม

DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb

2. ตรวจสอบการตอบกลับ

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

DigitalOcean ไม่มี Dry Run ที่แท้จริง แต่คุณสามารถตรวจสอบความถูกต้องของอินพุตได้:

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)
})

ทดสอบ API โครงสร้างพื้นฐานของ DigitalOcean ด้วย Apidog - ฟรี

ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

401 ไม่ได้รับอนุญาต

สาเหตุ: โทเค็นไม่ถูกต้องหรือหมดอายุ

วิธีแก้ไข: สร้างโทเค็นใหม่จาก Dashboard ตรวจสอบรูปแบบส่วนหัว Authorization

422 ไม่สามารถประมวลผลเอนทิตีได้

สาเหตุ: พารามิเตอร์ไม่ถูกต้อง (ภูมิภาค, ขนาด, รูปภาพ, ฯลฯ ผิด)

วิธีแก้ไข: ตรวจสอบเอกสาร API ของ DigitalOcean สำหรับค่าที่ถูกต้อง ปัญหาที่พบบ่อย:

429 มีคำขอมากเกินไป

สาเหตุ: เกินขีดจำกัดอัตราการเรียกใช้ (ค่าเริ่มต้น 2000 คำขอ/ชั่วโมง)

วิธีแก้ไข: ใช้ 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

สาเหตุ: บัญชีมี Droplet มากเกินไป

วิธีแก้ไข: ลบ Droplet ที่ไม่ได้ใช้งาน หรือขอเพิ่มขีดจำกัดจากฝ่ายสนับสนุน

ทางเลือกและการเปรียบเทียบ

คุณสมบัติ DigitalOcean AWS GCP
ขนาด Droplet คงที่ กำหนดเอง กำหนดเอง
Kubernetes Managed DOKS EKS GKE
Object storage Spaces S3 Cloud Storage
Block storage Volumes EBS Persistent Disk
Load balancers ในตัว ELB Cloud Load Balancing
Free tier เครดิต $200 จำกัด เครดิต $300
ความเรียบง่ายของ API ★★★★★ ★★☆☆☆ ★★★☆☆

DigitalOcean ชนะในเรื่องความเรียบง่าย API นั้นตรงไปตรงมา และการทำงานส่วนใหญ่สามารถทำได้โดยไม่ต้องจัดการกับบริการย่อย ๆ หลายสิบรายการ

กรณีการใช้งานจริง

สภาพแวดล้อมการพัฒนา สตาร์ทอัพสร้างสภาพแวดล้อมการพัฒนาที่แยกออกจากกันสำหรับแต่ละ Branch ทุก Pull Request จะเรียกใช้ API เพื่อสร้าง Droplet ด้วยโค้ดล่าสุด หลังจากรวมโค้ดแล้ว Droplet จะถูกทำลาย นักพัฒนาสามารถทดสอบในสภาพแวดล้อมที่เหมือนการผลิตโดยไม่ต้องตั้งค่าด้วยตนเอง

เว็บเซิร์ฟเวอร์ที่ปรับขนาดได้อัตโนมัติ แอปพลิเคชันเว็บตรวจสอบโหลด เมื่อ CPU เกิน 70% API จะสร้าง Droplet ใหม่และเพิ่มไปยัง Load Balancer เมื่อโหลดลดลง Droplet จะถูกทำลาย ทำให้ค่าใช้จ่ายต่ำในขณะที่ประสิทธิภาพสูง

คลัสเตอร์ฐานข้อมูล บริการฐานข้อมูลแบบ Managed จัดเตรียม Primary และ Replica Volumes ข้ามภูมิภาค API จัดการการกำหนดค่าการจำลองข้อมูล, การจัดตารางเวลาการสำรองข้อมูล และการตั้งค่า Failover โดยอัตโนมัติ

บทสรุป

สิ่งที่คุณได้เรียนรู้:

ปุ่ม

คำถามที่พบบ่อย

Droplet มีราคาเท่าไหร่?ราคาเริ่มต้นที่ $5/เดือน สำหรับ 1 vCPU/1GB โปรดตรวจสอบหน้าราคาสำหรับอัตราปัจจุบัน มีการเรียกเก็บเงินรายชั่วโมง

ฉันสามารถใช้ SSH keys กับ Droplet ที่สร้างผ่าน API ได้หรือไม่?ได้ คุณสามารถรวมลายนิ้วมือ SSH key ในอาร์เรย์ `ssh_keys` เมื่อสร้าง Droplets

Volumes และ Spaces แตกต่างกันอย่างไร?Volumes คือ Block Storage ที่แนบมากับ Droplets ส่วน Spaces คือ Object Storage (เหมือน S3) ใช้ Volumes สำหรับฐานข้อมูล และ Spaces สำหรับไฟล์

ฉันจะรับ Kubernetes config ได้อย่างไร?

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
  -H "Authorization: Bearer YOUR_TOKEN"

ฉันสามารถปรับขนาด Droplet ได้หรือไม่?ได้ ใช้การดำเนินการ Resize การลดขนาดต้องปิดเครื่องก่อน ส่วนการอัปเกรดสามารถทำได้ในขณะที่เครื่องกำลังทำงาน

Backups และ Snapshots แตกต่างกันอย่างไร?Backups คือสำเนาอัตโนมัติรายสัปดาห์/รายวันที่จัดการโดย DigitalOcean ส่วน Snapshots คือรูปภาพที่คุณสร้างด้วยตนเองตามต้องการ

การสร้าง Droplet ใช้เวลานานเท่าไหร่?โดยปกติ 30-60 วินาที บางภูมิภาคและขนาดอาจใช้เวลานานกว่า

ฉันสามารถใช้ Terraform กับ DigitalOcean ได้หรือไม่?ได้ DigitalOcean มีผู้ให้บริการ Terraform อย่างเป็นทางการ ซึ่งยอดเยี่ยมสำหรับ Infrastructure as Code

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API