السلام عليكم ورحمة الله وبركاته.
بصراحة وأنا بقلب في البوستات، الفكرة دي شدتني جدا ولمعت معايا. لأن فعلا مشكلة الـ Schema Unification موجودة في حاجات كتير.
يعني لو أنا مثلا بتعامل مع كذا API بيرجعوا Text، وواحد منهم وقع، هحتاج أعمل Fallback للتاني. المشكلة هنا إن كل API ليه Schema مختلفة، فهتلاقي نفسك مضطر تعمل Abstraction Layer أو Middleware مخصوص عشان يوحد الدنيا دي كلها ويرجعلك Schema ثابتة تقدر تستخدمها في الـ Front-end.
فقلت: طب ليه منعملش Middleware يعمل Unification للـ Schemas دي كلها؟
وبعدين الفكرة كبرت شوية. طب ليه نقف عند الـ Schema بس؟ ليه ما نوحدش التعامل مع الـ APIs نفسها؟
يعني نبني Package أو Middleware أو سميها زي ما تسميها، تتعامل مع Text وAudio وTranslation وTafsir، وفي الآخر ترجعلك Unified Schema واحدة. وكمان يبقى عندها Primary Providers وFallback Providers، بحيث لو API وقعت، أو حصل ضغط زي اللي بيحصل في رمضان، الدنيا تفضل شغالة عادي.
لأن لو اتكلمنا مثلا عن تطبيق قرآني، فأنت محتاج Text وAudio وTafsir وTranslation، وغالبا كل واحدة منهم جاية من API مختلفة. فممكن تلاقي نفسك بتتعامل مع 8 APIs، ولا واحدة فيهم شبه التانية.
فالفكرة بقت إن الـ Developer يتعامل مع مصدر واحد وSchema واحدة، من غير ما يشيل هم الـ APIs اللي تحت.
في الأول كنت بفكر أعملها External API Router زي التطبيق اللي حضرتك بنيته، لكن بعد تفكير قلت إن الأفضل إنها تبقى JavaScript Package أو Middleware. لأن كده هيبقى عندك الـ Core Functionality جاهزة، وبعد كده اللي عايز يبني External API Router يبنيه فوقيها براحتة.
وحسيت إن معظم الناس مالت لفكرة الـ External API Router، لكن أنا بصراحة ملت أكتر لفكرة الـ Package.
فشدّيت الزمام وشمرت على ساعدي وقلت: بسم الله. 😄
قعدت اليومين اللي فاتوا أحاول أبني حاجة زي كده، والحمد لله بفضل الله، النسخة الأولية خلصت كـ NPM Package ولسه طبعا في بدايتها ومحتاجة شغل وتحسينات كتير.
وكمان عملت Fork للـ Application الأصلي، وضفت عليه التعديلات اللازمة بحيث يستخدم الـ Package دي، وفتحت Pull Request بالتغييرات عشان نشوف شكل استخدامها في Use Case حقيقي، وكمان حاولت أصلح شوية Vulnerabilities بسيطة كانت موجودة بحكم إن المشروع بقاله فترة.
وده الـ Repository الخاص بالـ Package:
https://github.com/Ibrahim-Rezq/quran-api-unified
وبرضه المشروع إن شاء الله هيبقى Open Source، بحيث أي حد يحب يشارك أو يضيف حاجة يبقى الموضوع متاح للجميع.
فلو فيه أي اقتراحات أو أفكار أو حاجات ممكن تتحسن، يبقى جزاكم الله خيرا.
وربنا ييسر الحال إن شاء الله، وينفعنا بما علمنا، ويعلمنا ما ينفعنا.
والله المستعان، وجزاكم الله خيرا.