تكامل الأنظمة عبر API: ربط المصنع رقمياً
ما هي واجهة البرمجة (API)؟
تخيّل أن عندك نظام SCADA يراقب خط إنتاج، ونظام ERP يُدير المخزون، ولوحة تحكم سحابية تعرض التقارير للإدارة. كيف تجعل هذه الأنظمة الثلاثة تتحدث مع بعضها؟ الجواب: واجهات البرمجة (APIs).
API هي اختصار Application Programming Interface — وهي مجموعة قواعد تُحدد كيف يطلب برنامج خدمةً من برنامج آخر. فكّر فيها كنادل المطعم: أنت (العميل) تطلب من النادل (API) طبقاً، والنادل ينقل طلبك للمطبخ (الخادم) ويعود بالنتيجة.
في البيئة الصناعية، الـ APIs تربط بين:
- SCADA وقواعد البيانات السحابية
- أنظمة ERP وخطوط الإنتاج
- حساسات IoT ومنصات التحليل
- تطبيقات الجوال ولوحات المراقبة
بروتوكول HTTP: أساس التواصل
كل طلب API عبر الويب يستخدم بروتوكول HTTP (HyperText Transfer Protocol). كل طلب يتكون من:
- طريقة (Method): ماذا تريد أن تفعل
- عنوان (URL): أين تريد الوصول
- ترويسات (Headers): معلومات إضافية (نوع البيانات، المصادقة)
- جسم الطلب (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 بسيطة، قابلة للتوسع، وسهلة الفهم:
- بدون حالة (Stateless): كل طلب يحتوي كل المعلومات اللازمة — الخادم لا يتذكر الطلبات السابقة
- موارد (Resources): كل شيء يُمثَّل كمورد له عنوان URL فريد
- تمثيلات (Representations): المورد يُرسل كـ JSON أو XML
- واجهة موحدة (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).