مشروع المنشورات  - 2 -

بعد أن وضعنا الأسس لمشروعنا سنبدأ الآن بالعمل على طبقة الشبكة وفيها عدّة أمور سنمر عليها تباعاً ..


ولكن حتى تتضح لك الرؤية فإن الأمور التي تحتاج أن تثبتها في طبقة الشبكة هي :

1- معترضات ساعي البريد

2- المتحكم بالأخطاء

3- منظّم المخرجات

4- نقاط النهاية


المعترضات

ما هو مفهوم المعترضات ؟

قبل أن نشرح المعترضات نحتاج أن نعرف ما هو ساعي البريد API , وهذا يحتاج تفصيلاً في مقالٍ آخر ولكن نأخذ فكرة سريعة عنه.


ساعي البريد : وهو واجهة برمجية صنعت للتواصل بين جزء الواجهة Frontend وجزء الخادم Backend , يقوم ساعي البريد بارسال الرسائل واستقبال الردود من الخادم.


يحتوي ساعي البريد على معلومات تعلمه إلى أين يرسل الرسالة , ونوع الطلب , وغيرها من الأمور , ويطلق عليها مجتمعةً اسم ترويسة headers.


وهنا يأتي دور المعترض , بدلاً من ان تكتب ترويسة الرسالة في كل مرة ترسلها عبر ساعي البريد , تضع معترضاً وهو يجهّز لك هذه الترويسة لتقوم باستخدام هذا النموذج في كل مرة ترسل الرسالة.


إذن كيف نثبت المعترضات داخل Dio؟


نحتاج هنا أولاً لنكتب كلاساً يجمع المعترضات ويثبتها داخل كائن dio ولذلك نحتاج أولاً لتعريف هذا الكلاس.


نتجه إلى 

common->network

ثم ننشئ ملف بعنوان dio_client.dart نضع بداخله الكود التالي:

وقبل أن نضيف المعترضات نقوم بصنع واحدٍ منها , وفي نفس المجلد نقوم بانشاء ملف بعنوان dio_interceptor:

ننشئ كلاساً داخل الملف , نعطيه اسماً ونجعله يرث من كلاسٍ داخل dio يدعى QueuedInterceptor.


يحتوي الكلاس هذا على مجموعة دوال رئيسة , نحتاج أن نقوم بنسخها overriding لنقوم باستخدامها , وهي:

  • onRequest

    وهذا ما نحتاجُ أن نعمل عليه , وهو الذي نضع داخله ترويسة الرسائل والطلبات الخارجة عن طريق ساعي البريد

  • onError

    في حالةِ حصل أي خطأ

  • onResponse

    وهو اعتراض الردود القادمة واجراء عملياتٍ عليها , وهو نادر الاستخدام عادةً


الآن بعد ان تعرفنا عليهم نحتاج أن نعرف كائن dio داخل الكلاس أولاً على الصيغة التالية :

ثم نقوم بعد ذلك بتعريف الدالة التي نحتاجها onRequest لتثبيت الترويسة.

نقوم بعدها بتثبيت الترويسة التي نحتاجها وذلك عبر استخدام كائن dio المنشأ سابقاً داخل الدالة.


ولنعرف الترويسة التي نحتاجها بامكاننا اختبار ساعي البريد أولاً عبر برامجٍ مثل postman أو غيرها.


على سبيل المثال:

الآن بعد أن جهزت ترويسة الرسالة , نحتاج أن نقوم باضافتها للمعترض , وهنا سنستخدم 3 ترويسات داخل كل رسالة وهي ContentType , Accept , contentType , BaseUrl وهي التي تحدد نوع البيانات المرسلة والعائدة وعنوان الارسال والاستقبال , وسنتطرق في نقاط النهاية للعناوين والتعامل معها.


أما الآن أضف الترويسة بهذا الشكل داخل دالة onRequest: 

بعد ذلك عد إلى ملف dio_client.dart لتقوم باضافة المعترض إلى كائن dio السابق:

نلاحظ أنا اضفنا غير المعترض الذي انشأناه آنفا معترضاً آخر وهو prettey_dio_logger , وظيفة هذا المعترض الثاني طبع تفاصيل الرسالة والأخطاء لنتعرف عليها بشكل اسرع خلال فترة العمل.


بهذا الشكل نكونُ أتممنا تثبيت المعترضات. نحتاج لخطوةٍ أخيرة ستكون مرفقةً بنقاط النهاية.


Join