تقنية

Node و Python

واجهات API وخدمات وخطوط بيانات متينة ومبنية للتوسع.

الواجهة الخلفية هي حيث تُكسب الموثوقية. نبني واجهات API وخدمات بـ Node.js وPython يبقى أداؤها ثابتًا تحت الضغط: بأنواع بيانات محددة، ومختبرة، وموثّقة، وقابلة للمراقبة من اليوم الأول. وإليها أيضًا تنتهي أصعب أجزاء أي نشاط تجاري: نظام ERP الذي يملك أسعارك، ووسائل الدفع التي يستخدمها عملاؤك فعلًا، والمهام التي تعمل ليلًا دون أن يراقبها أحد. يناسب Node.js واجهات API والتكاملات، خاصةً إلى جانب واجهة أمامية مكتوبة بـ TypeScript، بينما Python هي البيئة الطبيعية لأعمال البيانات وتعلم الآلة.

ما نقدمه

كيف ننفّذ Node و Python.

تصميم واجهات API

خدمات REST وGraphQL بعقود واضحة يستطيع فريقك البناء عليها.

المعالجة في الخلفية

طوابير ومهام ومجدولات للأعمال التي لا ينبغي أن تعطّل أي طلب.

خطوط البيانات وتعلم الآلة

خطوط Python لنقل البيانات (ETL) والتحليلات وأحمال تعلم الآلة.

الاختبار وقابلية المراقبة

كود بأنواع محددة، واختبارات آلية، وسجلات منظمة، وتتبّع للطلبات كمعيار أساسي.

تكامل مع ERP ووسائل الدفع

Odoo أو نظام ERP الحالي لديك مصدرًا وحيدًا للحقيقة، ووسائل الدفع المحلية، من الدفع عند الاستلام إلى المحافظ وأكواد الدفع في منافذ البيع، مدمجة في دورة حياة الطلب.

مصممة لتتعطل بأمان

عمليات كتابة لا تتكرر آثارها عند إعادتها، وطلبات تُحفظ في طابور، وقراءات من ذاكرة مؤقتة، فلا يُخصم من أحد مرتين بسبب اتصال منقطع، ولا يضيع طلب بسبب عطل.

على أرض الواقع

ما يتضمنه العمل فعلًا.

اكتب العقد قبل وجود أي تطبيق عميل

موقع SG-Mart وتطبيقاه على iOS وAndroid تتعامل كلها مع واجهة API واحدة، لذلك جاء العقد أولًا، وبُني كل تطبيق عليه. والمخطط المكتوب يتيح لفريقي الويب والجوال العمل بالتوازي. كما يفرض انضباطًا في إدارة الإصدارات: فتحديث التطبيق لا يمكن سحبه من هاتف العميل، لذا تظل الإصدارات الأقدم تستدعي واجهتك لشهور، وأي تغيير يكسرها يكسر تجربة عملاء يدفعون لك.

التكامل مع ERP هو تصميم للمزامنة

يبقى نظام ERP هو المرجع، وتسأله الخدمة ولا تحتفظ أبدًا بكتالوج ثانٍ. والقرارات الحقيقية هنا قرارات توقيت: التحقق من المخزون لحظيًا مع كل مشاهدة لمنتج سيُثقل نظام Odoo، والمزامنة الليلية ستؤدي إلى بيع ما ليس متوفرًا. ودرجة الحداثة المناسبة تختلف من فئة إلى أخرى، ولا بد أن يقرر أحدٌ أي الطرفين يفوز حين يصل تعديل من المستودع وطلب من الموقع في الثانية نفسها، ثم يدوّن القرار.

الدفع آلة حالات، لا زر

الدفع عند الاستلام له رسوم متغيرة ويغيّر دورة حياة الطلب، ويجب أن يعود إلى نظام ERP بصيغة يعرفها فريق المالية. وأضف إلى ذلك أكواد Fawry والمحافظ والتقسيط، وحدودًا مثل سقف InstaPay البالغ 70,000 جنيه مصري للتحويل الواحد، فتصبح طبقة الدفع نظامًا فرعيًا قائمًا بذاته. وقد تصل إشعارات بوابات الدفع متأخرة أو مكررة أو بغير ترتيبها، لذلك نصمّم كل عملية بحيث لا يتكرر أثرها إذا أُعيدت.

كل ما هو بطيء يذهب إلى الطابور

إن لم يكن المستخدم بحاجة إلى النتيجة كي يرى الشاشة التالية، فمكانها ليس داخل الطلب. تغيير أحجام آلاف صور الكتالوج القادمة من ERP، والإشعارات، ومزامنة المخزون، والتقارير، كلها تعمل كمهام في الخلفية، مع إعادة المحاولة ومنطقة انتظار تبقى فيها المهام الفاشلة حتى يراجعها شخص. وحين يتعطل ERP لبرهة، تُحفظ الطلبات الجديدة في طابور ولا تضيع، والمهمة المجدولة التي تتوقف بصمت تُطلق تنبيهًا.

Python حيث يكون عمل البيانات

مشاريع التحليلات والذكاء الاصطناعي تتعثر غالبًا في البنية الموصلة، لا في النماذج: استخراج بيانات نظيفة ومحدّثة ومضبوطة الصلاحيات من قاعدة بيانات تمتد لسنوات، ومن نظام ERP، ومن الجداول التي يحدّثها شخص واحد. نكتب هذا الاستخراج والتنظيف كخطوط Python يمكن إعادة تشغيلها، ومسجّلة، وتعيش في مستودعك، ومعها أي مجموعات تقييم. أما جانب النماذج نفسها فتغطيه صفحة الذكاء الاصطناعي ونماذج اللغة الكبيرة.

تقليديون عن قصد، وحذرون حيث يكون الخطأ مكلفًا

معظم قرارات الأنظمة الخلفية يمكن التراجع عنها في أسبوع. وقليل منها لا يمكن: نموذج البيانات، وطريقة تسجيل دخول المستخدمين، وكل ما يمس المال. هذه تنال التأني: مزوّد هوية مجرَّب بدلًا من نظام دخول مصنوع يدويًا، وقاعدة بيانات مُدارة بدلًا من واحدة نرعاها بأنفسنا، وأنواع بيانات محددة من الطرف إلى الطرف حتى تكون إعادة الهيكلة آمنة. وفي كل ما عدا ذلك نلتزم بالمألوف.

ما تحصل عليه

نتائج، لا مجرد مخرجات.

  • واجهات API تحافظ على زمن استجابة p99 تحت حركة استخدام حقيقية
  • خدمات تتكامل معها الفرق الأخرى دون الحاجة إلى اجتماع
  • أنظمة خلفية تكشف أعطالها بوضوح في بيئة الاختبار، لا بصمت في بيئة الإنتاج
  • طلبات تُحفظ في طابور ولا تضيع حين يتعثر ERP أو مزوّد الدفع
  • الخدمات وخطوط البيانات وتوثيقها في مستودعك من أول سطر كود
إجابات مباشرة

ما ستريد أن تسأل عنه.

هل نبني النظام الخلفي بـ Node.js أم بـ Python؟

اختر حسب طبيعة العمل، ثم حسب فريقك. يناسب Node.js واجهات API والمزايا اللحظية والتكاملات، ويتيح لمنتج مكتوب بـ TypeScript استخدام لغة واحدة محددة الأنواع من الطرف إلى الطرف. وتناسب Python خطوط البيانات والتحليلات وتعلم الآلة. وكثير من الأنظمة تستخدم الاثنين، يتشاركان قاعدة بيانات أو طابورًا. والتقنية الموثّقة جيدًا التي يعرفها فريقك أفضل من التقنية الرائجة.

REST أم GraphQL؟

REST لواجهات API العامة وواجهات الشركاء، حيث تهم إمكانية التخزين المؤقت والبساطة والأدوات المألوفة. وGraphQL حين تحتاج عدة تطبيقات، كموقع وتطبيق جوال، إلى أجزاء مختلفة من البيانات نفسها، وتريد التوقف عن بناء نقطة وصول لكل شاشة. وفي الحالتين يُكتب العقد ويُراجع قبل بناء أول تطبيق عميل.

هل يمكنكم التكامل مع Odoo أو نظام ERP آخر لدينا؟

نعم. ربطنا لـ SG-Mart متجرًا إلكترونيًا وتطبيقًا بنظام Odoo العامل لديهم: المنتجات، وأكثر من 110 فئات، وقوائم الأسعار، والضرائب، والصور، دون أي إدخال يدوي. والنهج نفسه ينطبق على SAP وDynamics وNetSuite أو أي نظام مبني داخليًا. أما إن كان كتالوجك بسيطًا، فقد يكفيك موصّل جاهز، وسنخبرك بذلك.

كم يضيف التكامل إلى التكلفة؟

التكاملات من أكبر العوامل المؤثرة في السعر، لأن كل تكامل يعني اختبارًا مقابل نظام لا تتحكم فيه. الإصدار الأول الذي يتضمن تكاملين أو نحوهما يقع قرب الحد الأعلى من نطاقنا المعتاد بين 10,000 و60,000 دولار، وقد تتجاوزه منصة مبنية حول التكامل مع ERP. أخبرنا بالأنظمة المعنية وسنعود إليك بنطاق سعري حقيقي خلال يوم عمل واحد.

نظامنا الخلفي قديم. هل نعيد كتابته؟

نادرًا ما يكون ذلك دفعة واحدة. نضع طبقة API أمام النظام القديم، ثم ننقل إليها وظيفة واحدة في كل مرة، بدءًا بشيء مؤلم لكنه قليل الترابط، مثل التقارير. يبدأ الكود الجديد بنسخ بيانات النظام القديم، ولا يصبح المرجع إلا بعد أن يثبت نفسه. وإن كان النظام صغيرًا وتقنيته منتهية فعلًا، فقد تكون إعادة كتابة محدودة هي الطريق الأرخص.

من يحتفظ بالكود والمفاتيح وبيانات الدخول؟

أنت. يكون المستودع في حساب مؤسستك من أول سطر كود. ومفاتيح API وبيانات دخول بوابات الدفع ونظام ERP تُحفظ في حسابات مؤسستك ومخازن الأسرار لديها، لا داخل الكود ولا في الحساب الشخصي لأي مهندس، فيمكن إنهاء التعاون دون أن يبقى لدينا سر واحد من أسرار بيئة الإنتاج.

لنتحدث عن Node و Python.

أخبرنا عن منتجك وجدولك الزمني وأهدافك، وسنرد عليك خلال يوم عمل واحد.