جزء كبير من عالم صناعة البرمجيات اليوم مبني على صناعة وتقديم APIs للناس لاستخدامها وجزء كبير من نجاح أو فشل ال APIs مبني على أدائها وسرعتها فورقة وقلم وتعالوا نتكلم عن ازاي نحسن ال API Performance.
جزء كبير من عالم صناعة البرمجيات اليوم مبني على صناعة وتقديم APIs للناس لاستخدامها وجزء كبير من نجاح أو فشل ال APIs مبني على أدائها وسرعتها فورقة وقلم وتعالوا نتكلم عن ازاي نحسن ال API Performance.
Top 6 API Performance Techniques
Cache
استخدام الـ Cache يعتبر من أهم طرق تحسين أداء الـ API, لأنها بتقلل عدد الطلبات المتكررة لل Server وبتسرّع الاستجابة ودا لأن:
طلب البيانات من الـ Database بياخد وقت كبير, تخزين بيانات الطلبات المتكررة هيوفرها للمستخدم اللي طلبها وكذلك لمستخدمين اخرين بنفس الطلب وبسرعة عالية جدًا
كمان ال Cache بيخفف الضغط على قاعدة البيانات ففي حالات الضغط العالي (زي الجمعة البيضاء و غيرها) بيمنع الServer من الانهيار ويضمن استمرارية الخدمة
في حلول كثيرة لتطبيق ال Cache و في أكثر من Layer في الSystem تقدر تطبق فيها ال Cache.
لو حابب تقرأ أكثر عن الموضوع فعلى موقعنا ورقات ومقالات كثير بتتكلم عنه.
كلنا عارفين إن ال Database calls مكلفة بشكل عام وعشان كدا غالبًا بنتفاداها بال Cache, ولكن كتير مننا بينسى يعمل Query Optimization ودا بيأثر بشكل ملحوظ خصوصًا في ال Queries المعقدة.فكل ما الQuery يبقى أبسط، كل ما قاعدة البيانات ترد أسرع، وبالتالي المستخدم ياخد نتيجة أسرع.
راجع كدا مًبرمجنا الفاضل كام (*) في Queries مشاريعك علي ال Production هل محتاج كل ال Columns فعلاً, استخدام Indexes وتجنب ال N+1 Queries واستبدال ال Joins المعقدة بتحسين ال Schema بشكل أفضل كل دي بتساعدك على تحسين الأداء.
Indexing - Query Plan and Performance Optimization
Pagination
بعض الطلبات ممكن ترجع Responses كبيرة جدًا كمثال لما بتفتح موقع تسوق فيه ملايين المنتجات, إنك تقوم بإرسال كل المنتجات للعميل في مرة واحدة دا هيكون بطئ جدًا ولذلك بنقسم النتيجة لصفحات وبنرد على ال Request الواحد بعدد معين من المنتجات لو ال Client طلب ثاني بنقدمله الصفحة التالية أو العدد التالي من المنتجات وهكذا.
ال Pagination بنقدر ننفذه بأكثر من طريقة أشهر طريقتين هما :
Offset-based : استخدام Limit & Offset
Cursor-based: استخدام Cursor & next_token
Compress Payloads
الـ Compress Payloads يعني إننا نضغط البيانات اللي رايحة أو جاية من الـ API علشان حجمها يبقى أصغر. الفكرة بسيطة: لما حجم البيانات يقل، سرعة النقل بتزيد، وده بيخلي استجابة الـ API أسرع بكتير. ودا مهم خصوصًا لما الServer يكون بيتعامل مع عدد كبير من المستخدمين أو بيرجع بيانات ضخمة زي JSON فيها قوائم طويلة أو معلومات كتير.
أهميته بتبان لما تستخدمه مع تطبيقات موبايل أو شبكات بطيئة، أو حتى مع APIs فيها تفاعل لحظي (Real-Time). الضغط بيقلل وقت الانتظار وبالتالي تحسين تجربة المستخدم.
الطرق الشائعة لتنفيذه هي باستخدام خوارزميات زي Gzip أو Brotli. وتقدر تحققها بسهولة علي ال Server, بس لازم تتأكد إن الClient يقدر يفهم النوع ده من الضغط، وده بيتم باستخدام Header زي Accept-Encoding و Content-Encoding.
باختصار، ضغط البيانات خطوة بسيطة لكن فعالة جدًا لتحسين أداء الـ API وتقليل التحميل على الشبكة والسيرفر.
Connection Pool
استخدام Connection Pool يعني إنك بتجهّز مجموعة من ال Connection بقاعدة البيانات تكون جاهزة طول الوقت بدل ما تفتح وتقفل اتصال جديد في كل طلب API. ليه؟ لأن فتح الاتصال بحد ذاته بياخد وقت ومجهود من السيرفر، وده بيأثر على الأداء لما عدد الطلبات يزيد. الـ Pool بيسهّل الموضوع عن طريق إعادة استخدام الاتصالات اللي خلصت بدل ما ينشئ اتصال جديد من الصفر.