Forem

Cover image for دليل المطور: كيفية استخدام واجهات برمجة تطبيقات ديجيتال أوشن (DigitalOcean APIs) للبنية التحتية السحابية
Yusuf Khalidd
Yusuf Khalidd

Posted on • Originally published at apidog.com

دليل المطور: كيفية استخدام واجهات برمجة تطبيقات ديجيتال أوشن (DigitalOcean APIs) للبنية التحتية السحابية

ملخص سريع

تدير واجهات برمجة تطبيقات DigitalOcean القطرات (droplets)، وحدات التخزين (volumes)، جدران الحماية (firewalls)، موازنات التحميل (load balancers)، مجموعات Kubernetes، والمزيد. قم بالمصادقة باستخدام رموز الوصول الشخصية (personal access tokens)، واستدعِ api.digitalocean.com/v2، وتعامل مع حدود المعدل. للاختبار، استخدم Apidog للتحقق من صحة التكوينات، واختبار توفير البنية التحتية، وتوثيق سير عمل الأتمتة الخاص بك.

جرّب Apidog اليوم

مقدمة

تبسط DigitalOcean الحوسبة السحابية. بينما تقدم AWS و GCP مئات الخدمات، يركز DigitalOcean على الأساسيات: الحوسبة (droplets)، التخزين (volumes)، الشبكات (عناوين IP العائمة، جدران الحماية)، Kubernetes المدارة، ومنصة التطبيقات. واجهة برمجة التطبيقات (API) بسيطة وتركز على المهام الأساسية.

أهم الاستخدامات العملية لواجهة برمجة تطبيقات DigitalOcean:

  • إنشاء بيئات تطوير تلقائيًا.
  • إدارة مجموعات Kubernetes.
  • البنية التحتية كتعليمات برمجية باستخدام Terraform أو Pulumi.
  • توفير مسارات CI/CD.
  • عمليات النشر متعددة المناطق.

💡 إذا كنت تقوم بأتمتة البنية التحتية، فإن Apidog يساعدك على اختبار استدعاءات API، وحفظ تكوينات البنية التحتية كنماذج قابلة لإعادة الاستخدام، والتعاون مع فريقك في سير عمل التوفير.

المصادقة

رموز الوصول الشخصية

للحصول على رمز مصادقة:

  1. انتقل إلى لوحة تحكم DigitalOcean ← API ← إنشاء رمز جديد.
  2. سمِّ الرمز وحدد تاريخ انتهاء الصلاحية.
  3. انسخ الرمز وخزّنه بأمان.

استخدام الرمز:

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

تنسيق الاستجابة

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

القطرات (Droplets) (الأجهزة الافتراضية)

سرد جميع القطرات (droplets)

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

إنشاء قطرة (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"]
  }'
Enter fullscreen mode Exit fullscreen mode

الأحجام الشائعة:

  • s-1vcpu-1gb - 1 وحدة معالجة مركزية افتراضية، 1 جيجابايت RAM (5 دولارات شهريًا).
  • s-2vcpu-2gb - 2 وحدة معالجة مركزية افتراضية، 2 جيجابايت RAM (10 دولارات شهريًا).
  • s-2vcpu-4gb - 2 وحدة معالجة مركزية افتراضية، 4 جيجابايت RAM (20 دولارًا شهريًا).
  • s-4vcpu-8gb - 4 وحدات معالجة مركزية افتراضية، 8 جيجابايت RAM (40 دولارًا شهريًا).

المناطق:

  • nyc1, nyc3 - نيويورك
  • sfo3 - سان فرانسيسكو
  • ams3 - أمستردام
  • sgp1 - سنغافورة

الحصول على تفاصيل القطرة (droplet)

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

حذف قطرة (droplet)

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

إجراءات القطرة (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"
  }'
Enter fullscreen mode Exit fullscreen mode

تغيير الحجم:

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"
  }'
Enter fullscreen mode Exit fullscreen mode

لقطة (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"
  }'
Enter fullscreen mode Exit fullscreen mode

وحدات التخزين (Volumes) (تخزين الكتل)

إنشاء وحدة تخزين (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"
  }'
Enter fullscreen mode Exit fullscreen mode

إرفاق وحدة تخزين بقطرة (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
  }'
Enter fullscreen mode Exit fullscreen mode

سرد وحدات التخزين (volumes)

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

الشبكات

سرد عناوين IP العائمة

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

تعيين عنوان 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"
  }'
Enter fullscreen mode Exit fullscreen mode

إنشاء جدار حماية

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]
  }'
Enter fullscreen mode Exit fullscreen mode

موازنات التحميل

إنشاء موازن تحميل

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]
  }'
Enter fullscreen mode Exit fullscreen mode

مجموعات 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
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

سرد تجمعات العقد (node pools)

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

توسيع تجمع العقد (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
  }'
Enter fullscreen mode Exit fullscreen mode

حذف المجموعة

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

الاختبار باستخدام Apidog

توفير البنية التحتية مكلف. اختبر باستخدام Apidog قبل تنفيذ العمليات.

Apidog Testing

1. إعداد البيئة

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

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')
})
Enter fullscreen mode Exit fullscreen mode

3. مفاهيم التشغيل التجريبي (Dry Run)

لا يوجد دعم رسمي لـ 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)
})
Enter fullscreen mode Exit fullscreen mode

اختبر واجهات برمجة تطبيقات البنية التحتية لـ DigitalOcean باستخدام Apidog - مجانًا

الأخطاء الشائعة والإصلاحات

401 غير مصرح به (Unauthorized)

  • السبب: رمز غير صالح أو منتهي الصلاحية.
  • الإصلاح: أعد إنشاء الرمز الخاص بك من لوحة التحكم. تحقق من تنسيق رأس المصادقة.

422 كيان غير قابل للمعالجة (Unprocessable Entity)

  • السبب: معلمات غير صالحة (منطقة خاطئة، حجم، صورة).
  • الإصلاح: تحقق من وثائق API للقيم الصالحة.
    • المنطقة لا تدعم الحجم المطلوب
    • معرف الصورة غير موجود
    • تم الوصول إلى الحد الأقصى للقطرات

429 طلبات كثيرة جدًا (Too Many Requests)

  • السبب: تجاوز حد المعدل (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')
}
Enter fullscreen mode Exit fullscreen mode

تم الوصول إلى الحد الأقصى للقطرات (Droplet limit reached)

  • السبب: الحساب يحتوي على عدد كبير جدًا من القطرات.
  • الإصلاح: احذف القطرات غير المستخدمة أو اطلب زيادة الحد من الدعم الفني.

البدائل والمقارنات

الميزة DigitalOcean AWS GCP
أحجام القطرات ثابتة مخصصة مخصصة
Kubernetes DOKS مُدار EKS GKE
تخزين الكائنات Spaces S3 Cloud Storage
تخزين الكتل Volumes EBS Persistent Disk
موازنات التحميل مدمجة ELB Cloud Load Balancing
الطبقة المجانية رصيد 200 دولار محدودة رصيد 300 دولار
بساطة API ★★★★★ ★★☆☆☆ ★★★☆☆

يتفوق DigitalOcean في البساطة. واجهة برمجة التطبيقات مباشرة، وتعمل معظم العمليات دون تعقيد.

حالات الاستخدام الواقعية

بيئات التطوير:

شركة ناشئة تنشئ بيئات تطوير معزولة لكل فرع. كل Pull Request ينشئ قطرة جديدة تلقائيًا. بعد الدمج يتم حذفها. لا حاجة لإعداد يدوي.

خوادم الويب ذات التوسع التلقائي:

تطبيق ويب يراقب الحمل، وعند تجاوز 70% CPU يقوم بإنشاء قطرات جديدة وربطها بموازن التحميل. عند انخفاض الحمل يتم حذف القطرات تلقائيًا.

مجموعات قواعد البيانات:

الخدمة المدارة لقواعد البيانات توفر النسخ المتماثل، النسخ الاحتياطي، وتجاوز الفشل تلقائيًا عبر API.

الخاتمة

ما تعلمته خطوة بخطوة:

  • المصادقة باستخدام رموز الوصول الشخصية.
  • تنفيذ عمليات القطرات (إنشاء، حذف، إعادة تشغيل) بواسطة API.
  • العمل مع وحدات التخزين الدائمة (volumes).
  • تكوين جدران الحماية وموازنات التحميل برمجيًا.
  • إدارة مجموعات Kubernetes تلقائيًا.
  • اختبار البنية التحتية باستخدام Apidog قبل التوفير الفعلي.

الأسئلة الشائعة

كم تكلفة القطرة (droplet)؟

تبدأ الأسعار من 5 دولارات شهريًا لوحدة معالجة مركزية افتراضية واحدة / 1 جيجابايت. تحقق من صفحة الأسعار للحصول على الأسعار الحالية. تتوفر الفوترة بالساعة.

هل يمكنني استخدام مفاتيح SSH مع القطرات التي تم إنشاؤها عبر API؟

نعم. قم بتضمين بصمة مفتاح SSH في مصفوفة ssh_keys عند إنشاء القطرات.

ما الفرق بين وحدات التخزين (volumes) و Spaces؟

وحدات التخزين (Volumes) هي تخزين كتل (block storage) يتم إرفاقها بالقطرات. Spaces هو تخزين كائنات (object storage) مثل S3. استخدم وحدات التخزين لقواعد البيانات وSpaces للملفات.

كيف أحصل على تكوين Kubernetes؟

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

هل يمكنني تغيير حجم القطرة (droplet)؟

نعم، استخدم إجراء تغيير الحجم. تتطلب عمليات التخفيض إيقاف التشغيل. يمكن إجراء الترقيات أثناء التشغيل.

ما الفرق بين النسخ الاحتياطية (backups) واللقطات (snapshots)؟

النسخ الاحتياطية هي نسخ تلقائية أسبوعية/يومية تديرها DigitalOcean. اللقطات (Snapshots) هي صور يدوية عند الطلب.

كم يستغرق إنشاء القطرات (droplets)؟

عادةً ما بين 30-60 ثانية. قد تستغرق بعض المناطق والأحجام وقتًا أطول.

هل يمكنني استخدام Terraform مع DigitalOcean؟

نعم. لدى DigitalOcean موفر Terraform رسمي. إنه ممتاز للبنية التحتية كتعليمات برمجية.

Top comments (0)