الرئيسية قاعدة المعرفة البرمجة والمنطق تكامل الأنظمة عبر API: ربط المصنع رقمياً
البرمجة والمنطق

تكامل الأنظمة عبر API: ربط المصنع رقمياً

ما هي واجهة البرمجة (API)؟

تخيّل أن عندك نظام SCADA يراقب خط إنتاج، ونظام ERP يُدير المخزون، ولوحة تحكم سحابية تعرض التقارير للإدارة. كيف تجعل هذه الأنظمة الثلاثة تتحدث مع بعضها؟ الجواب: واجهات البرمجة (APIs).

API هي اختصار Application Programming Interface — وهي مجموعة قواعد تُحدد كيف يطلب برنامج خدمةً من برنامج آخر. فكّر فيها كنادل المطعم: أنت (العميل) تطلب من النادل (API) طبقاً، والنادل ينقل طلبك للمطبخ (الخادم) ويعود بالنتيجة.

في البيئة الصناعية، الـ APIs تربط بين:

  • SCADA وقواعد البيانات السحابية
  • أنظمة ERP وخطوط الإنتاج
  • حساسات IoT ومنصات التحليل
  • تطبيقات الجوال ولوحات المراقبة

بروتوكول HTTP: أساس التواصل

كل طلب API عبر الويب يستخدم بروتوكول HTTP (HyperText Transfer Protocol). كل طلب يتكون من:

  1. طريقة (Method): ماذا تريد أن تفعل
  2. عنوان (URL): أين تريد الوصول
  3. ترويسات (Headers): معلومات إضافية (نوع البيانات، المصادقة)
  4. جسم الطلب (Body): البيانات المُرسلة (في POST و PUT)

طرق HTTP الأساسية

الطريقة الوظيفة مثال صناعي
GET قراءة بيانات جلب قراءة حساس الحرارة
POST إنشاء مورد جديد تسجيل إنذار جديد
PUT تحديث مورد كامل تعديل إعدادات ماكينة
PATCH تحديث جزئي تغيير عتبة إنذار واحدة
DELETE حذف مورد إزالة جدول صيانة قديم

رموز الحالة (Status Codes)

2xx = نجاح:     200 OK, 201 Created
3xx = تحويل:    301 Moved, 304 Not Modified
4xx = خطأ عميل: 400 Bad Request, 401 Unauthorized, 404 Not Found
5xx = خطأ خادم: 500 Internal Error, 503 Service Unavailable

ما هو REST؟

REST (Representational State Transfer) هو نمط معماري — مجموعة قيود تجعل الـ API بسيطة، قابلة للتوسع، وسهلة الفهم:

  1. بدون حالة (Stateless): كل طلب يحتوي كل المعلومات اللازمة — الخادم لا يتذكر الطلبات السابقة
  2. موارد (Resources): كل شيء يُمثَّل كمورد له عنوان URL فريد
  3. تمثيلات (Representations): المورد يُرسل كـ JSON أو XML
  4. واجهة موحدة (Uniform Interface): استخدام طرق HTTP القياسية

مثال عملي — API لإدارة ماكينات المصنع:

GET    /api/machines          → قائمة كل الماكينات
GET    /api/machines/42       → بيانات الماكينة رقم 42
POST   /api/machines          → إضافة ماكينة جديدة
PUT    /api/machines/42       → تحديث بيانات الماكينة 42
DELETE /api/machines/42       → حذف الماكينة 42
GET    /api/machines/42/alarms → إنذارات الماكينة 42

JSON: لغة البيانات

JSON (JavaScript Object Notation) هو صيغة تبادل البيانات الأكثر استخداماً في APIs الحديثة. بسيط، مقروء، وخفيف الحجم.

{
  "machine_id": 42,
  "name": "CNC Lathe - Haas ST-20",
  "location": "Hall B, Line 3",
  "status": "running",
  "temperature_c": 67.5,
  "spindle_rpm": 2400,
  "alarms": [],
  "last_maintenance": "2025-12-15",
  "sensors": {
    "vibration_mm_s": 3.2,
    "oil_pressure_bar": 4.8,
    "power_kw": 12.7
  }
}

أنواع البيانات في JSON:

  • نص (String): "running" — بين علامتي تنصيص
  • رقم (Number): 67.5 — بدون علامات تنصيص
  • منطقي (Boolean): true أو false
  • مصفوفة (Array): [1, 2, 3] — قائمة مرتبة
  • كائن (Object): {"key": "value"} — أزواج مفتاح-قيمة
  • فارغ (Null): null

WebSocket: الاتصال الحي

HTTP يعمل بنمط طلب-استجابة: العميل يسأل، الخادم يجيب، وينتهي الاتصال. لكن في المراقبة الصناعية، تحتاج بيانات لحظية ومستمرة — قراءات حساسات كل ثانية، إنذارات فورية، حالة الماكينات الآنية.

هنا يأتي WebSocket: بروتوكول يفتح قناة اتصال ثنائية الاتجاه ودائمة بين العميل والخادم.

HTTP التقليدي:
  العميل → "أعطني قراءة الحرارة" → الخادم
  العميل ← "67.5°C" ← الخادم
  (الاتصال يُغلق)
  العميل → "أعطني قراءة الحرارة" → الخادم
  العميل ← "68.1°C" ← الخادم
  (الاتصال يُغلق)

WebSocket:
  العميل ↔ الخادم (اتصال دائم)
  ← "67.5°C"
  ← "68.1°C"
  ← "تحذير: الحرارة مرتفعة!"
  → "أوقف الماكينة"

مثال عملي: مراقبة حساس عبر WebSocket

// الاتصال بخادم WebSocket لمراقبة خط الإنتاج
const ws = new WebSocket('ws://192.168.1.100:8080/live');

ws.onopen = () => {
  console.log('متصل بخادم المراقبة');
  // الاشتراك في بيانات الماكينة 42
  ws.send(JSON.stringify({
    action: 'subscribe',
    machine_id: 42,
    sensors: ['temperature', 'vibration', 'power']
  }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  // data = { machine_id: 42, temperature_c: 68.1, vibration_mm_s: 3.5, ... }

  if (data.temperature_c > 85) {
    triggerAlarm('الحرارة مرتفعة في الماكينة ' + data.machine_id);
  }
  updateDashboard(data);
};

ws.onerror = (error) => {
  console.error('خطأ في الاتصال:', error);
};

المصادقة والأمان

في البيئة الصناعية، تأمين الـ API ليس رفاهية — إنه ضرورة. لا تريد أن يتمكن شخص غير مصرّح له من إيقاف خط إنتاج عبر طلب API.

API Key

أبسط طريقة — مفتاح فريد يُرسل مع كل طلب:

GET /api/machines HTTP/1.1
Host: factory.local
X-API-Key: sk_prod_a1b2c3d4e5f6

Bearer Token (JWT)

الطريقة الأكثر شيوعاً — المستخدم يسجّل دخوله ويحصل على رمز مؤقت:

POST /api/auth/login
Body: { "username": "operator1", "password": "..." }
Response: { "token": "eyJhbGciOiJIUzI1NiIs..." }

GET /api/machines
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

نصائح أمان حاسمة

  • لا ترسل كلمات مرور كنص عادي — استخدم HTTPS دائماً
  • صلاحيات محددة: المشغّل يقرأ فقط، المهندس يقرأ ويكتب، المدير يتحكم بالكل
  • حدّ معدل الطلبات (Rate Limiting): منع إغراق الخادم بطلبات كثيرة
  • سجّل كل الطلبات (Logging): من فعل ماذا ومتى

مثال تكاملي: SCADA → API → لوحة تحكم

لنبني سيناريو واقعي كامل:

┌─────────────┐      ┌──────────────┐      ┌─────────────┐
│   SCADA     │      │  API Server  │      │  Dashboard  │
│  (Modbus)   │─────→│   (REST +    │←────→│   (React)   │
│             │      │  WebSocket)  │      │             │
└─────────────┘      └──────────────┘      └─────────────┘
                           │
                     ┌─────┴─────┐
                     │ Database  │
                     │(TimeSeries)│
                     └───────────┘

الخطوة 1: SCADA يقرأ الحساسات عبر Modbus ويرسلها للـ API كل 5 ثوانٍ:

import requests
import time

SCADA_API = "http://factory-server:3000/api/readings"
API_KEY = "sk_prod_a1b2c3d4"

while True:
    reading = {
        "machine_id": 42,
        "timestamp": "2025-12-20T14:30:00Z",
        "temperature_c": read_modbus_register(40001),
        "pressure_bar": read_modbus_register(40002),
        "vibration_mm_s": read_modbus_register(40003)
    }
    response = requests.post(
        SCADA_API,
        json=reading,
        headers={"X-API-Key": API_KEY}
    )
    if response.status_code == 201:
        print("تم تسجيل القراءة بنجاح")
    time.sleep(5)

الخطوة 2: لوحة التحكم تستقبل البيانات لحظياً عبر WebSocket وتعرضها في رسوم بيانية حية.

أدوات اختبار الـ API

قبل أن تربط أنظمتك، اختبر الـ API أولاً:

  • curl: أداة سطر أوامر بسيطة ومتوفرة في كل الأنظمة
  • Postman: واجهة رسومية سهلة لبناء واختبار الطلبات
  • HTTPie: بديل أنيق لـ curl مع تلوين تلقائي
# جلب قائمة الماكينات باستخدام curl
curl -H "X-API-Key: sk_prod_a1b2c3" \
     http://factory-server:3000/api/machines

# إرسال قراءة جديدة
curl -X POST http://factory-server:3000/api/readings \
     -H "Content-Type: application/json" \
     -H "X-API-Key: sk_prod_a1b2c3" \
     -d '{"machine_id": 42, "temperature_c": 67.5}'

خلاصة

التقنية متى تستخدمها مثال
REST API عمليات CRUD، تكامل بين أنظمة ربط ERP مع خط الإنتاج
WebSocket بيانات لحظية، مراقبة حية لوحة مراقبة الماكينات
JSON تبادل البيانات المهيكلة إرسال قراءات الحساسات
HTTP Methods تحديد نوع العملية GET للقراءة، POST للإنشاء

الـ APIs هي العمود الفقري لأي مصنع ذكي. إتقانها يعني القدرة على ربط أي نظام بأي نظام آخر — وهذا هو جوهر الثورة الصناعية الرابعة (Industry 4.0).

API REST WebSocket JSON HTTP integration واجهة البرمجة التكامل الربط البرمجي بروتوكول HTTP البيانات المهيكلة الاتصال بالسحابة