ملخص سريع
تدير واجهات برمجة تطبيقات DigitalOcean القطرات (droplets)، وحدات التخزين (volumes)، جدران الحماية (firewalls)، موازنات التحميل (load balancers)، مجموعات Kubernetes، والمزيد. قم بالمصادقة باستخدام رموز الوصول الشخصية (personal access tokens)، واستدعِ api.digitalocean.com/v2، وتعامل مع حدود المعدل. للاختبار، استخدم Apidog للتحقق من صحة التكوينات، واختبار توفير البنية التحتية، وتوثيق سير عمل الأتمتة الخاص بك.
مقدمة
تبسط DigitalOcean الحوسبة السحابية. بينما تقدم AWS و GCP مئات الخدمات، يركز DigitalOcean على الأساسيات: الحوسبة (droplets)، التخزين (volumes)، الشبكات (عناوين IP العائمة، جدران الحماية)، Kubernetes المدارة، ومنصة التطبيقات. واجهة برمجة التطبيقات (API) بسيطة وتركز على المهام الأساسية.
أهم الاستخدامات العملية لواجهة برمجة تطبيقات DigitalOcean:
- إنشاء بيئات تطوير تلقائيًا.
- إدارة مجموعات Kubernetes.
- البنية التحتية كتعليمات برمجية باستخدام Terraform أو Pulumi.
- توفير مسارات CI/CD.
- عمليات النشر متعددة المناطق.
💡 إذا كنت تقوم بأتمتة البنية التحتية، فإن Apidog يساعدك على اختبار استدعاءات API، وحفظ تكوينات البنية التحتية كنماذج قابلة لإعادة الاستخدام، والتعاون مع فريقك في سير عمل التوفير.
المصادقة
رموز الوصول الشخصية
للحصول على رمز مصادقة:
- انتقل إلى لوحة تحكم DigitalOcean ← API ← إنشاء رمز جديد.
- سمِّ الرمز وحدد تاريخ انتهاء الصلاحية.
- انسخ الرمز وخزّنه بأمان.
استخدام الرمز:
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"]
}'
الأحجام الشائعة:
-
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"
حذف قطرة (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"
}'
لقطة (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"
}'
وحدات التخزين (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"
}'
إرفاق وحدة تخزين بقطرة (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"
الشبكات
سرد عناوين IP العائمة
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN"
تعيين عنوان 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"
}'
إنشاء جدار حماية
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]
}'
موازنات التحميل
إنشاء موازن تحميل
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 pools)
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 قبل تنفيذ العمليات.
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)
لا يوجد دعم رسمي لـ 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)
})
اختبر واجهات برمجة تطبيقات البنية التحتية لـ 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')
}
تم الوصول إلى الحد الأقصى للقطرات (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"
هل يمكنني تغيير حجم القطرة (droplet)؟
نعم، استخدم إجراء تغيير الحجم. تتطلب عمليات التخفيض إيقاف التشغيل. يمكن إجراء الترقيات أثناء التشغيل.
ما الفرق بين النسخ الاحتياطية (backups) واللقطات (snapshots)؟
النسخ الاحتياطية هي نسخ تلقائية أسبوعية/يومية تديرها DigitalOcean. اللقطات (Snapshots) هي صور يدوية عند الطلب.
كم يستغرق إنشاء القطرات (droplets)؟
عادةً ما بين 30-60 ثانية. قد تستغرق بعض المناطق والأحجام وقتًا أطول.
هل يمكنني استخدام Terraform مع DigitalOcean؟
نعم. لدى DigitalOcean موفر Terraform رسمي. إنه ممتاز للبنية التحتية كتعليمات برمجية.

Top comments (0)