|
تُرجمت هذه الوثيقة آليًا من الإنجليزية باستخدام Claude AI. ينبغي مراجعة المصطلحات المتعلقة بمجال WMO/الأرصاد الجوية من قِبل متحدث أصلي قبل الاستخدام الإنتاجي. راجع النسخة الإنجليزية الأصلية للاطلاع على النسخة المرجعية. |
1. نظرة عامة
يُتيح WIS2 Downloader واجهة REST API لإدارة الاشتراكات ومراقبة النظام.
-
عنوان URL الأساسي:
http://localhost:5002 -
مواصفة OpenAPI:
http://localhost:5002/openapi -
واجهة Swagger:
http://localhost:5002/swagger
استبدل localhost:5002 بعنوان خادمك في حال النشر عن بُعد. يُهيَّأ عنوان URL الأساسي عبر WIS2DOWNLOADER_SUBSCRIPTION_MANAGER_URL في .env.
|
2. المصادقة
لا تتطلب الـ API مصادقة. في بيئة الإنتاج، ضعها خلف وكيل عكسي مع المصادقة (راجع قسم التحكم في الوصول في دليل الإدارة).
3. API الاشتراكات
يُعرَّف كل اشتراك بـ UUID ويربط موضوع MQTT ومسار حفظ وفلتر اختياري وبيانات اعتماد اختيارية وقائمة انتظار. يمكن أن تشترك اشتراكات متعددة في نفس الموضوع — يُفتح اتصال MQTT مرة واحدة وتُوجَّه الرسائل إلى جميع الاشتراكات المطابقة.
3.1. عرض قائمة الاشتراكات
يُعيد جميع الاشتراكات النشطة مجمَّعةً حسب الموضوع.
GET /subscriptions
3.1.1. الاستجابة
| الحالة | الوصف |
|---|---|
200 |
نجاح — خريطة موضوع → خريطة UUID اشتراك → تفاصيل الاشتراك |
503 |
Redis غير متوفر |
3.1.2. مثال
curl http://localhost:5002/subscriptions
{
"cache/a/wis2/+/data/core/weather/surface-based-observations/#": {
"550e8400-e29b-41d4-a716-446655440000": {
"save_path": "surface-obs",
"filter": {}
},
"661f9511-f30c-52e5-b827-557766551111": {
"save_path": "surface-obs-bufr",
"filter": {
"name": "bufr-only",
"rules": [
{ "id": "accept-bufr", "order": 1, "match": { "media_type": { "equals": "application/bufr" } }, "action": "accept" }
]
}
}
}
}
3.2. إنشاء اشتراك
يُنشئ اشتراكًا جديدًا. يُعيِّن UUID ويُعيد سجل الاشتراك الكامل.
إذا كان هذا أول اشتراك للموضوع المحدد، يُفتح اتصال MQTT. تستخدم الاشتراكات الإضافية لنفس الموضوع الاتصال القائم.
POST /subscriptions
Content-Type: application/json
3.2.1. جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
|
string |
نعم |
نمط موضوع MQTT لـ WIS2. يدعم أحرف البدل |
|
string |
لا |
المجلد الفرعي تحت جذر البيانات حيث تُحفظ الملفات. |
|
كائن |
لا |
فلتر قائم على قواعد. راجع مخطط الفلتر. |
|
كائن |
لا |
بيانات اعتماد HTTP لمجموعات البيانات ذات الوصول المقيَّد. راجع مخطط بيانات الاعتماد. |
|
string |
لا |
قائمة انتظار التنزيل: |
3.2.2. الاستجابة
| الحالة | الوصف |
|---|---|
201 |
تم الإنشاء — يُعيد سجل الاشتراك الكامل |
400 |
طلب غير صالح — حقول مفقودة أو غير صحيحة |
503 |
الخدمة غير متاحة — فشل الاتصال بـ Redis |
3.2.3. ترويسات الاستجابة
| الترويسة | الوصف |
|---|---|
|
عنوان URL لاسترداد الاشتراك المُنشأ ( |
3.2.4. أمثلة
# اشتراك بسيط
curl -X POST http://localhost:5002/subscriptions \
-H "Content-Type: application/json" \
-d '{
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"target": "surface-obs"
}'
# اشتراك مع فلتر
curl -X POST http://localhost:5002/subscriptions \
-H "Content-Type: application/json" \
-d '{
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"target": "surface-obs-bufr",
"filter": {
"name": "bufr-only",
"rules": [
{ "id": "accept-bufr", "order": 1, "match": { "media_type": { "equals": "application/bufr" } }, "action": "accept" },
{ "id": "default-reject", "order": 999, "match": { "always": true }, "action": "reject" }
]
}
}'
# اشتراك في مجموعة بيانات ذات وصول مقيَّد باستخدام المصادقة الأساسية
curl -X POST http://localhost:5002/subscriptions \
-H "Content-Type: application/json" \
-d '{
"topic": "cache/a/wis2/+/data/recommended/weather/surface-based-observations/#",
"target": "restricted-obs",
"credentials": { "type": "basic", "username": "myuser", "password": "s3cr3t" }
}'
# توجيه التنزيلات الكبيرة إلى قائمة انتظار large-files
curl -X POST http://localhost:5002/subscriptions \
-H "Content-Type: application/json" \
-d '{
"topic": "cache/a/wis2/fr-meteofrance/data/core/weather/space-based-observations/noaa-21/cris",
"target": "space-obs",
"queue": "large_files"
}'
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"save_path": "surface-obs",
"filter": {},
"credentials": null,
"queue": "small_files"
}
3.3. الحصول على اشتراك
يُعيد السجل الكامل لاشتراك محدد.
GET /subscriptions/{id}
3.3.1. معاملات المسار
| المعامل | النوع | الوصف |
|---|---|---|
|
string (UUID) |
UUID الاشتراك المُعاد عند إنشائه |
3.3.2. الاستجابة
| الحالة | الوصف |
|---|---|
200 |
نجاح |
404 |
الاشتراك غير موجود |
3.3.3. مثال
curl http://localhost:5002/subscriptions/550e8400-e29b-41d4-a716-446655440000
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"save_path": "surface-obs",
"filter": {},
"credentials": null,
"queue": "small_files"
}
لا تُعاد أسرار بيانات الاعتماد (password و`token`) أبدًا. تُضمَّن في الاستجابات type و`username` فقط (للمصادقة الأساسية).
|
3.4. تحديث اشتراك
يُحدِّث مسار الحفظ أو الفلتر أو بيانات الاعتماد أو قائمة الانتظار لاشتراك قائم. لا يمكن تغيير الموضوع — احذف الاشتراك وأعد إنشاءه لتغيير الموضوع.
PUT /subscriptions/{id}
Content-Type: application/json
3.4.1. جسم الطلب
جميع الحقول اختيارية. تُحدَّث الحقول المُقدَّمة فقط.
| الحقل | النوع | الوصف |
|---|---|---|
|
string |
المجلد الفرعي الجديد تحت جذر البيانات |
|
كائن |
الفلتر الجديد القائم على قواعد (يستبدل الفلتر الحالي) |
|
كائن |
بيانات الاعتماد الجديدة (تستبدل بيانات الاعتماد الحالية) |
|
string |
قائمة الانتظار الجديدة: |
3.4.2. الاستجابة
| الحالة | الوصف |
|---|---|
200 |
سجل الاشتراك المُحدَّث |
400 |
قيمة حقل غير صالحة |
404 |
الاشتراك غير موجود |
503 |
Redis غير متوفر |
3.4.3. مثال
curl -X PUT http://localhost:5002/subscriptions/550e8400-e29b-41d4-a716-446655440000 \
-H "Content-Type: application/json" \
-d '{ "target": "surface-obs-v2", "queue": "high_priority" }'
3.5. حذف اشتراك
يحذف اشتراكًا. إذا كان آخر اشتراك لموضوعه، يُغلَق اتصال MQTT لذلك الموضوع.
DELETE /subscriptions/{id}
3.5.1. الاستجابة
| الحالة | الوصف |
|---|---|
200 |
تم الحذف بنجاح |
404 |
الاشتراك غير موجود |
503 |
Redis غير متوفر |
3.5.2. مثال
curl -X DELETE http://localhost:5002/subscriptions/550e8400-e29b-41d4-a716-446655440000
{ "status": "deleted", "id": "550e8400-e29b-41d4-a716-446655440000" }
4. API المراقبة
4.1. فحص الصحة
GET /health
يُعيد دائمًا 200. تحقق من حقل status للحالة الفعلية.
curl http://localhost:5002/health
{ "status": "healthy" }
4.2. مقاييس Prometheus
يُعيد المقاييس بتنسيق نص Prometheus.
GET /metrics
4.2.1. المقاييس المتاحة
| المقياس | النوع | التسميات | الوصف |
|---|---|---|---|
|
Counter |
status |
إجمالي الإشعارات المعالَجة بواسطة Celery |
|
Counter |
cache, media_type |
الملفات المُنزَّلة بنجاح |
|
Counter |
cache, media_type |
إجمالي البايتات المُنزَّلة |
|
Counter |
reason |
الإشعارات المتخطاة حسب السبب |
|
Counter |
cache, reason |
التنزيلات الفاشلة |
|
Gauge |
queue_name |
المهام الحالية في جميع قوائع انتظار Celery |
4.2.2. مثال
curl http://localhost:5002/metrics
4.3. مواصفة OpenAPI
GET /openapi
4.4. واجهة Swagger
وثائق API التفاعلية متاحة على:
GET /
GET /swagger
5. استجابات الأخطاء
تتبع جميع استجابات الأخطاء هذا التنسيق:
{ "error": "Error message describing the problem" }
5.1. رسائل الخطأ الشائعة
| الحالة | الخطأ | السبب |
|---|---|---|
400 |
"No topic provided" |
POST /subscriptions بدون حقل |
400 |
"credentials.type must be 'basic' or 'bearer'" |
نوع بيانات اعتماد غير صالح |
400 |
"queue must be one of: high_priority, large_files, small_files" |
اسم قائمة انتظار غير معروف |
404 |
"Subscription '{id}' not found" |
UUID غير موجود |
503 |
"Failed to connect to Redis: …" |
Redis غير متوفر |
503 |
"Failed to queue subscription command…" |
فشل Redis pub/sub |
6. مخططات البيانات
6.1. الاشتراك
سجل الاشتراك الكامل كما يُخزَّن ويُعاد بواسطة الـ API.
| الحقل | النوع | الوصف |
|---|---|---|
|
string (UUID) |
معرِّف فريد يُعيَّن عند الإنشاء |
|
string |
نمط موضوع MQTT لـ WIS2 |
|
string | null |
المجلد الفرعي تحت جذر البيانات حيث تُحفظ الملفات |
|
كائن |
فلتر قائم على قواعد (الكائن الفارغ |
|
كائن | null |
بيانات الاعتماد المستخدمة للتنزيل. تُخفى الأسرار في الاستجابات. |
|
string |
قائمة انتظار التنزيل: |
6.2. مخطط الفلتر
تستخدم الفلاتر قائمة مرتَّبة من القواعد. تُقيَّم القواعد بالترتيب؛ يُطبَّق إجراء أول قاعدة مطابقة. إذا لم تتطابق أي قاعدة، يُقبَل الملف.
| الحقل | النوع | الوصف |
|---|---|---|
|
string |
اسم الفلتر للتعريف |
|
مصفوفة |
قائمة مرتَّبة من قواعد الفلتر |
6.2.1. مخطط قاعدة الفلتر
| الحقل | النوع | الوصف |
|---|---|---|
|
string |
معرِّف القاعدة الفريد |
|
integer |
ترتيب التنفيذ — القيم الأصغر تُنفَّذ أولًا |
|
كائن |
الشرط للتحقق منه. راجع شروط التطابق. |
|
string |
|
6.2.2. شروط التطابق
| الشرط | الوصف |
|---|---|
|
التطابق على نوع MIME للملف |
|
التطابق على حجم الملف بالبايت |
|
التطابق على معرِّف المركز المُصدِر (مثال: |
|
التطابق على معرِّف بيانات WIS2 |
|
التطابق على عنوان URL التنزيل |
|
تطابق غير مشروط (يُستخدم كقاعدة افتراضية شاملة) |
عوامل السلسلة النصية: equals، not_equals، in، not_in، pattern (glob)، regex
عوامل الحجم/العددية: gt_bytes، lt_bytes، gte_bytes، lte_bytes، between_bytes
المجمِّعات المنطقية: all (AND)، any (OR)، not
6.2.3. مثال على الفلتر
قبول ملفات BUFR فقط بحجم أقل من 10 ميجابايت؛ رفض كل شيء آخر:
{
"name": "bufr-small",
"rules": [
{
"id": "accept-small-bufr",
"order": 1,
"match": {
"all": [
{ "media_type": { "equals": "application/bufr" } },
{ "size": { "lt_bytes": 10485760 } }
]
},
"action": "accept"
},
{
"id": "default-reject",
"order": 999,
"match": { "always": true },
"action": "reject"
}
]
}
6.3. مخطط بيانات الاعتماد
يُستخدم لمصادقة تنزيلات HTTP من مجموعات البيانات ذات الوصول المقيَّد.
password و`token` للكتابة فقط — تُقبَل في الطلبات لكنها لا تُعاد أبدًا في الاستجابات.
|
| الحقل | النوع | الوصف |
|---|---|---|
|
string |
|
|
string |
مطلوب عندما يكون |
|
string (كتابة فقط) |
مطلوب عندما يكون |
|
string (كتابة فقط) |
مطلوب عندما يكون |
7. مرجع أنماط المواضيع
7.1. هيكل مواضيع WIS2
{origin|cache}/a/wis2/{centre-id}/data/{data-policy}/{earth-system-domain}/{category}/...
-
origin— البيانات الأصلية من مزود البيانات -
cache— نسخة مخزَّنة مؤقتًا من ذاكرة تخزين عالمية (مُوصى به للموثوقية) -
{centre-id}— معرِّف المركز. الحقل الأول هو رمز البلد ISO2C والثاني هو اسم وصفي للمركز (مثال:de-dwdلـ Deutscher Wetterdienst،fr-meteofranceلـ Météo-France) -
{data-policy}— سياسة بيانات WMO الموحَّدة:core(متاح مجانًا) أوrecommended(قد يتطلب بيانات اعتماد) -
{earth-system-domain}— مجال نظام الأرض من سياسة بيانات WMO الموحَّدة
7.2. أحرف البدل
| النمط | الرمز | الوصف |
|---|---|---|
مستوى واحد |
|
يطابق مستوى واحدًا بالضبط |
متعدد المستويات |
|
يطابق صفرًا أو أكثر من المستويات (يجب أن يكون في النهاية) |
7.3. أمثلة
| النمط | يطابق |
|---|---|
|
جميع بيانات Deutscher Wetterdienst |
|
رصد السطح من جميع المراكز |
|
جميع البيانات الأساسية من أي مركز |
|
جميع البيانات الجوية (أي سياسة) من أي مركز |