انتقل إلى المحتوى الرئيسي

دليل واجهة برمجة التطبيقات REST

← العودة إلى الوثائق الرئيسية

يوفر هذا الدليل وثائق شاملة لواجهة برمجة التطبيقات OmniSS7 REST API و Swagger UI.

جدول المحتويات

  1. نظرة عامة
  2. تكوين خادم HTTP
  3. Swagger UI
  4. نقاط نهاية API
  5. المصادقة
  6. تنسيقات الاستجابة
  7. معالجة الأخطاء
  8. المقاييس (بروميثيوس)
  9. طلبات مثال

نظرة عامة

تقدم OmniSS7 واجهة برمجة تطبيقات REST للوصول البرمجي إلى عمليات MAP (جزء تطبيق الهاتف المحمول). تتيح لك واجهة برمجة التطبيقات:

  • إرسال طلبات MAP (SRI، SRI-for-SM، UpdateLocation، إلخ)
  • استرجاع استجابات MAP
  • مراقبة مقاييس النظام عبر بروميثيوس

بنية واجهة برمجة التطبيقات


تكوين خادم HTTP

تفاصيل الخادم

المعلمةالقيمةقابل للتكوين
البروتوكولHTTPلا
عنوان IP0.0.0.0 (جميع الواجهات)عبر الكود فقط
المنفذ8080عبر الكود فقط
النقلPlug.Cowboyلا

رابط الوصول: http://[server-ip]:8080

تمكين/تعطيل خادم HTTP

تحكم فيما إذا كان خادم HTTP سيبدأ:

config :omniss7,
start_http_server: true # تعيين إلى false لتعطيل

الإعداد الافتراضي: true (مفعل)

عند التعطيل: لن يبدأ خادم HTTP، وستكون واجهة برمجة التطبيقات REST/Swagger UI غير متاحة.


Swagger UI

تتضمن واجهة برمجة التطبيقات Swagger UI لوثائق واجهة برمجة التطبيقات التفاعلية والاختبار.

الوصول إلى Swagger UI

الرابط: http://[server-ip]:8080/swagger

الميزات:

  • وثائق واجهة برمجة التطبيقات التفاعلية
  • وظيفة التجربة لاختبار نقاط النهاية
  • مخططات الطلب/الاستجابة
  • أحمال مثال

Swagger JSON

مواصفة OpenAPI متاحة على:

الرابط: http://[server-ip]:8080/swagger.json

حالات الاستخدام:

  • الاستيراد إلى Postman أو عملاء API الآخرين
  • توليد مكتبات العملاء
  • أتمتة وثائق واجهة برمجة التطبيقات

نقاط نهاية API

تتبع جميع نقاط نهاية عمليات MAP النمط: POST /api/{operation}

ملخص نقاط النهاية

نقطة النهايةالطريقةالغرضالمهلة
/api/sriPOSTإرسال معلومات التوجيه10s
/api/sri-for-smPOSTإرسال معلومات التوجيه لـ SM10s
/api/send-auth-infoPOSTإرسال معلومات المصادقة10s
/api/MT-forwardSMPOSTإعادة توجيه SM إلى الهاتف المحمول10s
/api/forwardSMPOSTإعادة توجيه SM10s
/api/updateLocationPOSTتحديث الموقع10s
/api/prnPOSTتوفير رقم التجوال10s
/metricsGETمقاييس بروميثيوسN/A
/swaggerGETSwagger UIN/A
/swagger.jsonGETمواصفة OpenAPIN/A

ملاحظة: جميع طلبات MAP لها مهلة محددة بـ 10 ثواني.


SendRoutingInfo (SRI)

استرجاع معلومات التوجيه لإجراء مكالمة إلى مشترك الهاتف المحمول.

نقطة النهاية: POST /api/sri

جسم الطلب:

{
"msisdn": "1234567890",
"gmsc": "5551234567"
}

المعلمات:

الحقلالنوعمطلوبالوصف
msisdnStringنعمMSISDN الطرف المتصل
gmscStringنعمالعنوان العالمي لمركز البوابة MSC

الاستجابة (200 OK):

{
"result": {
"imsi": "001001234567890",
"msrn": "5551234999",
"vlr_number": "5551234800",
...
}
}

خطأ (504 Gateway Timeout):

{
"error": "timeout"
}

مثال cURL:

curl -X POST http://localhost:8080/api/sri \
-H "Content-Type: application/json" \
-d '{
"msisdn": "1234567890",
"gmsc": "5551234567"
}'

SendRoutingInfoForSM (SRI-for-SM)

استرجاع معلومات التوجيه لتسليم رسالة نصية قصيرة إلى مشترك الهاتف المحمول.

نقطة النهاية: POST /api/sri-for-sm

جسم الطلب:

{
"msisdn": "1234567890",
"service_center": "5551234567"
}

المعلمات:

الحقلالنوعمطلوبالوصف
msisdnStringنعمMSISDN الوجهة
service_centerStringنعمالعنوان العالمي لمركز الخدمة

الاستجابة (200 OK):

{
"result": {
"imsi": "001001234567890",
"msc_number": "5551234800",
"location_info": {...},
...
}
}

مثال cURL:

curl -X POST http://localhost:8080/api/sri-for-sm \
-H "Content-Type: application/json" \
-d '{
"msisdn": "1234567890",
"service_center": "5551234567"
}'

SendAuthenticationInfo

طلب متجهات المصادقة لمشترك.

نقطة النهاية: POST /api/send-auth-info

جسم الطلب:

{
"imsi": "001001234567890",
"vectors": 3
}

المعلمات:

الحقلالنوعمطلوبالوصف
imsiStringنعمIMSI المشترك
vectorsIntegerنعمعدد متجهات المصادقة التي يجب توليدها

الاستجابة (200 OK):

{
"result": {
"authentication_sets": [
{
"rand": "0123456789ABCDEF...",
"xres": "...",
"ck": "...",
"ik": "...",
"autn": "..."
}
],
...
}
}

مثال cURL:

curl -X POST http://localhost:8080/api/send-auth-info \
-H "Content-Type: application/json" \
-d '{
"imsi": "001001234567890",
"vectors": 3
}'

MT-ForwardSM

تسليم رسالة نصية قصيرة متوقفة إلى مشترك.

نقطة النهاية: POST /api/MT-forwardSM

جسم الطلب:

{
"imsi": "001001234567890",
"destination_service_centre": "5551234567",
"originating_service_center": "5551234568",
"smsPDU": "0001000A8121436587F900001C48656C6C6F20576F726C64"
}

المعلمات:

الحقلالنوعمطلوبالوصف
imsiStringنعمIMSI المشترك الوجهة
destination_service_centreStringنعمGT لمركز الخدمة الوجهة
originating_service_centerStringنعمGT لمركز الخدمة المنشئ
smsPDUStringنعمSMS TPDU بتنسيق سداسي عشري

ملاحظة: يجب أن يكون smsPDU سلسلة مشفرة بتنسيق سداسي عشري (كبيرة أو صغيرة).

الاستجابة (200 OK):

{
"result": {
"delivery_status": "success",
...
}
}

مثال cURL:

curl -X POST http://localhost:8080/api/MT-forwardSM \
-H "Content-Type: application/json" \
-d '{
"imsi": "001001234567890",
"destination_service_centre": "5551234567",
"originating_service_center": "5551234568",
"smsPDU": "0001000A8121436587F900001C48656C6C6F20576F726C64"
}'

ForwardSM

إعادة توجيه رسالة نصية قصيرة (MO-SMS من المشترك).

نقطة النهاية: POST /api/forwardSM

جسم الطلب: نفس MT-ForwardSM

مثال cURL:

curl -X POST http://localhost:8080/api/forwardSM \
-H "Content-Type: application/json" \
-d '{
"imsi": "001001234567890",
"destination_service_centre": "5551234567",
"originating_service_center": "5551234568",
"smsPDU": "0001000A8121436587F900001C48656C6C6F20576F726C64"
}'

UpdateLocation

إخطار HLR بتغيير موقع المشترك (تسجيل VLR).

نقطة النهاية: POST /api/updateLocation

جسم الطلب:

{
"imsi": "001001234567890",
"vlr": "5551234800"
}

المعلمات:

الحقلالنوعمطلوبالوصف
imsiStringنعمIMSI المشترك
vlrStringنعمالعنوان العالمي لـ VLR

الاستجابة (200 OK):

{
"result": {
"hlr_number": "5551234567",
"subscriber_data": {...},
...
}
}

ملاحظة: في وضع HLR، يؤدي هذا إلى تشغيل تسلسل InsertSubscriberData (ISD) مع مهلة 10 ثوانٍ لكل ISD.

مثال cURL:

curl -X POST http://localhost:8080/api/updateLocation \
-H "Content-Type: application/json" \
-d '{
"imsi": "001001234567890",
"vlr": "5551234800"
}'

ProvideRoamingNumber (PRN)

طلب MSRN (رقم تجوال محطة الهاتف المحمول) لتوجيه المكالمات إلى مشترك تجوال.

نقطة النهاية: POST /api/prn

جسم الطلب:

{
"msisdn": "1234567890",
"gmsc": "5551234567",
"msc_number": "5551234800",
"imsi": "001001234567890"
}

المعلمات:

الحقلالنوعمطلوبالوصف
msisdnStringنعمMSISDN المشترك
gmscStringنعمGT لمركز البوابة MSC
msc_numberStringنعمرقم MSC للمشترك
imsiStringنعمIMSI المشترك

الاستجابة (200 OK):

{
"result": {
"msrn": "5551234999",
...
}
}

مثال cURL:

curl -X POST http://localhost:8080/api/prn \
-H "Content-Type: application/json" \
-d '{
"msisdn": "1234567890",
"gmsc": "5551234567",
"msc_number": "5551234800",
"imsi": "001001234567890"
}'

المصادقة

الحالة الحالية: لا تتطلب واجهة برمجة التطبيقات المصادقة.

اعتبارات الأمان:

  • واجهة برمجة التطبيقات مخصصة للاستخدام في الشبكات الداخلية/الموثوقة
  • النظر في استخدام قواعد جدار الحماية لتقييد الوصول
  • بالنسبة لنشر الإنتاج، النظر في تنفيذ واجهة برمجة التطبيقات لمصادقة middleware

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

تستخدم جميع الاستجابات تنسيق JSON.

استجابة النجاح

حالة HTTP: 200 OK

الهيكل:

{
"result": {
// بيانات استجابة محددة للعملية
}
}

استجابة الخطأ

حالة HTTP:

  • 400 Bad Request - جسم الطلب غير صالح
  • 504 Gateway Timeout - مهلة طلب MAP (10 ثوانٍ)
  • 404 Not Found - نقطة نهاية غير صالحة

الهيكل:

{
"error": "timeout"
}

أو

{
"error": "invalid request"
}

معالجة الأخطاء

الأخطاء الشائعة

الخطأرمز HTTPالوصفالحل
JSON غير صالح400جسم الطلب ليس JSON صالحتحقق من بناء جملة JSON
الحقول المفقودة400الحقول المطلوبة مفقودةتضمين جميع المعلمات المطلوبة
المهلة504تجاوز طلب MAP المهلة المحددة بـ 10 ثوانٍتحقق من اتصال M3UA، توفر HLR/VLR
غير موجود404نقطة نهاية غير صالحةتحقق من عنوان URL لنقطة النهاية

سلوك المهلة

تحتوي جميع طلبات MAP على مهلة محددة بـ 10 ثوانٍ:

  1. يتم إرسال الطلب إلى MapClient GenServer
  2. ينتظر الاستجابة لمدة تصل إلى 10 ثوانٍ
  3. إذا لم يتم تلقي استجابة → يتم إرجاع 504 Gateway Timeout
  4. إذا تم تلقي استجابة → يتم إرجاع 200 OK مع النتيجة

استكشاف الأخطاء وإصلاح المهلات:

  • تحقق من حالة اتصال M3UA (واجهة الويب → صفحة M3UA)
  • تحقق من أن العنصر الشبكي (HLR/VLR/MSC) قابل للوصول
  • تحقق من تكوين التوجيه
  • مراجعة سجلات أحداث SS7 للأخطاء

المقاييس (بروميثيوس)

تقدم واجهة برمجة التطبيقات مقاييس بروميثيوس للمراقبة.

نقطة نهاية المقاييس

الرابط: http://[server-ip]:8080/metrics

التنسيق: تنسيق نص بروميثيوس

مثال على الإخراج:

# HELP map_requests_total إجمالي طلبات MAP
# TYPE map_requests_total counter
map_requests_total{operation="sri"} 42
map_requests_total{operation="sri_for_sm"} 158
map_requests_total{operation="updateLocation"} 23

# HELP cap_requests_total إجمالي طلبات CAP
# TYPE cap_requests_total counter
cap_requests_total{operation="initialDP"} 87
cap_requests_total{operation="requestReportBCSMEvent"} 91

# HELP map_request_duration_milliseconds مدة طلبات/استجابات MAP بالمللي ثانية
# TYPE map_request_duration_milliseconds histogram
map_request_duration_milliseconds_bucket{operation="sri",le="10"} 5
map_request_duration_milliseconds_bucket{operation="sri",le="50"} 12
map_request_duration_milliseconds_bucket{operation="sri",le="100"} 35
...

# HELP map_pending_requests عدد طلبات MAP المعلقة
# TYPE map_pending_requests gauge
map_pending_requests 3

المقاييس المتاحة

المقياسالنوعالتسمياتالوصف
map_requests_totalCounteroperationإجمالي عدد طلبات MAP حسب نوع العملية
cap_requests_totalCounteroperationإجمالي عدد طلبات CAP حسب نوع العملية
map_request_duration_millisecondsHistogramoperationمدة الطلب بالمللي ثانية
map_pending_requestsGauge-عدد معاملات MAP المعلقة

تكوين بروميثيوس

أضف إلى prometheus.yml الخاص بك:

scrape_configs:
- job_name: 'omniss7'
static_configs:
- targets: ['server-ip:8080']
metrics_path: '/metrics'
scrape_interval: 15s

طلبات مثال

مثال بايثون

import requests
import json

# طلب SRI-for-SM
url = "http://localhost:8080/api/sri-for-sm"
payload = {
"msisdn": "1234567890",
"service_center": "5551234567"
}

response = requests.post(url, json=payload, timeout=15)

if response.status_code == 200:
result = response.json()
print(f"نجاح: {result}")
elif response.status_code == 504:
print("مهلة - لا استجابة من الشبكة")
else:
print(f"خطأ: {response.status_code} - {response.text}")

مثال جافا سكريبت

const axios = require('axios');

async function sendSRI() {
try {
const response = await axios.post('http://localhost:8080/api/sri', {
msisdn: '1234567890',
gmsc: '5551234567'
}, {
timeout: 15000
});

console.log('نجاح:', response.data);
} catch (error) {
if (error.code === 'ECONNABORTED') {
console.error('مهلة - لا استجابة من الشبكة');
} else {
console.error('خطأ:', error.response?.data || error.message);
}
}
}

sendSRI();

مثال Bash/cURL

#!/bin/bash

# طلب UpdateLocation
response=$(curl -s -w "\n%{http_code}" -X POST http://localhost:8080/api/updateLocation \
-H "Content-Type: application/json" \
-d '{
"imsi": "001001234567890",
"vlr": "5551234800"
}')

http_code=$(echo "$response" | tail -n 1)
body=$(echo "$response" | sed '$d')

if [ "$http_code" -eq 200 ]; then
echo "نجاح: $body"
elif [ "$http_code" -eq 504 ]; then
echo "مهلة - لا استجابة من الشبكة"
else
echo "خطأ $http_code: $body"
fi

مخططات التدفق

تدفق طلب API


ملخص

توفر واجهة برمجة التطبيقات OmniSS7 REST:

عمليات MAP - دعم كامل لـ SRI، SRI-for-SM، UpdateLocation، تسليم SMS، المصادقة
Swagger UI - وثائق واجهة برمجة التطبيقات التفاعلية والاختبار
مقاييس بروميثيوس - المراقبة والرصد
مهلات محددة مسبقًا - مهلة 10 ثوانٍ لجميع طلبات MAP
خادم HTTP - يعمل على المنفذ 8080 (قابل للتكوين عبر start_http_server)

للوصول إلى واجهة الويب، راجع دليل واجهة الويب.

للحصول على تفاصيل التكوين، راجع مرجع التكوين.