أثناء العمل على تشغيل الواجهة البرمجية لنظام إدارة المحتوى Itqan CMS API والاطلاع على مصادر التلاوات القرآنية المختلفة،لاحظت وجود تباين واضح في شكل بيانات الاستجابة (API responses)، إلى جانب غياب معيار موحد ينظم طريقة تمثيل البيانات بين هذه المصادر.
أبرز الاختلافات في استجابات الواجهات البرمجية
هناك عدة اختلافات جوهرية بين استجابات الواجهة البرمجية ناتجة عن اختلاف قرارات التصميم وفلسفة بناء الواجهات البرمجية بين المشاريع المختلفة.
على سبيل المثال نلاحظ في الصور التالية استجابات واجهات مختلفة لطلب عرض قائمة السور مع بياناتها الأساسية:
- استجابة من الواجهة البرمجية mp3quran:

- استجابة من الواجهة البرمجية Quran.com:

من أبرز الاختلافات التي نلاحظناها في الواجهات التي توفر مصادر قرآنية:
1. اختلاف تمثيل اسم السورة
تستخدم بعض الواجهات حقلًا واحدًا فقط لاسم السورة:
{
"name": "الفاتحة"
}
لكن دلالة هذا الحقل تتغير حسب لغة الطلب:
- بدون
language=en: يعيد الاسم بالعربية
- مع
language=en : يعيد الاسم بالإنجليزية (Al-Fatihah)
في حين تعتمد واجهات أخرى فصلًا واضحًا بين الحقول (الاسم بالعربية، الاسم بالإنجليزية، ترجمة الاسم..):
"name_simple": "Al-Fatihah",
"name_complex": "Al-Fātiḥah",
"name_arabic": "الفاتحة",
"translated_name": {
"language_name": "english",
"name": "The Opener"
}
2. اختلاف القيمة الافتراضية للحقول
قد تستخدم واجهتان نفس اسم الحقل name لكن القيمة الافتراضية للحقل تختلف من مصدر لآخر:
- بعض الواجهات تعتبر الاسم العربي هو القيمة الافتراضية ما لم يحدد غير ذلك عبر معامل اللغة.
- مصادر أخرى تعتبر الافتراضي هو الاسم الإنجليزي في حال لم يحدد المستخدم لغة معينة.
3. اختلاف المصطلحات لنفس المفهوم (ayah مقابل verse)
تستخدم بعض الواجهات مصطلح ayah وأخرى verse لتمثيل الآية القرآنية. وهذا الاختلاف في تسمية المفتاح ضمن الواجهة البرمجية يضيف عبئًا إضافيًا على المطورين عند توحيد الاستجابات بين مصادر متعددة.
فكرة مطروحة للنقاش: GraphQL كطبقة توحيد
تبرز الاختلافات في الاستجابة الحاجة إلى آلية توحيد واضحة تقلل التعقيد وتسهل على المطورين إعادة استخدام الواجهات.
كحل لهذه المشكلة، أقترح استخدام GraphQL كطبقة توحيد وسيطة، بحيث يتعامل المطور مع واجهة واحدة مرنة، ويكون قادرًا على تحديد شكل بيانات الاستجابة (API response) التي يحتاجها بدقة، بغض النظر عن:
- طريقة تخزين البيانات في الواجهة البرمجية
- أو المصدر الذي جاءت منه هذه البيانات
بهذا الأسلوب، يمكن دمج بيانات من مصادر متعددة ضمن واجهة موحدة، دون أن يضطر التطبيق إلى التعامل مباشرة مع اختلاف البنية والاستجابة، أو كتابة منطق تحويل مخصص لكل مصدر.
هذه الفكرة ليست حل نهائي، بل نقطة انطلاق للنقاش والاستفادة من خبرات المطورين في المجتمع.
أود سماع آرائكم حول جدوى هذا المقترح، والبدائل العملية الممكنة، وكيف يمكن الوصول إلى توحيد فعال لاستجابات الواجهات القرآنية بما يحقق أقصى استفادة للتطبيقات القرآنية الحالية والمستقبلية.
بانتظار مشاركاتكم ومقترحاتكم البناءة.