موبائل ایپلی کیشنز کے لیے مڈل ویئر — بنیادی باتیں، فن تعمیر اور استعمال

مصنف: IT Sectr اشاعت: 2026-03-09 مطالعے کا وقت: 8 منٹ

مڈل ویئر ایک درمیانی سافٹ ویئر کی تہہ ہے جو ایپلی کیشن کے مرکزی منطق سے پہلے یا بعد میں ڈیٹا پر کارروائی کرتی ہے، عبوری خدشات کو کاروباری کوڈ سے الگ کرتی ہے۔ Redux (2026) کے مطابق، مڈل ویئر مرکزی پروسیسنگ کے ذریعے لاگنگ اور تصدیق کے کوڈ کے دہراؤ کو 40% تک کم کرتا ہے۔ Redux مڈل ویئر ایک کلاسک مثال ہے، لیکن یہ نمونہ وسیع پیمانے پر استعمال ہوتا ہے: Ktor Client، Bloc، Express.js اور Dio۔

اہم نکات

  • مڈل ویئر ڈیٹا کے ذرائع اور کاروباری منطق کے درمیان ایک تہہ ہے، عبوری خدشات کو الگ کرتا ہے۔
  • Redux مڈل ویئر dispatch کو روکتا ہے اور reducer سے پہلے یا بعد میں action میں ترمیم کرتا ہے۔
  • Bloc لاگنگ اور تجزیات کے لیے BlocObserver کے ذریعے مڈل ویئر استعمال کرتا ہے۔
  • Ktor Client Logging اور Auth پلگ ان کے ساتھ پائپ لائن پر مبنی HTTP-مڈل ویئر بناتا ہے۔
  • Dio Interceptor Flutter میں HTTP درخواستوں کے لیے انٹرسیپٹرز کی زنجیر کے ساتھ مڈل ویئر ہے۔

مڈل ویئر کیا ہے؟

مڈل ویئر ایک سافٹ ویئر کی تہہ ہے جو دو سسٹم اجزاء کے درمیان واقع ہوتی ہے، ڈیٹا کو روکتی ہے اور اس پر کارروائی کرنے کے بعد ہدف کے جزو تک پہنچاتی ہے۔ موبائل ڈیولپمنٹ میں، مڈل ویئر تین اہم سیاق و سباق میں استعمال ہوتا ہے: اسٹیٹ مینجمنٹ (Redux، Bloc)، HTTP مواصلات (Ktor Client، Dio) اور ایونٹ ہینڈلنگ (EventBus، NotificationCenter)۔ بنیادی قدر ایپلی کیشن کے ڈومین منطق سے عبوری خدشات کی علیحدگی (لاگنگ، تصدیق، تجزیات) ہے۔ ہر اسکرین میں تجزیات کی کالز شامل کرنے کے بجائے، مڈل ویئر یہ مرکزی طور پر کرتا ہے۔

Pipe and Filter فن تعمیر

مڈل ویئر Pipe and Filter پیٹرن کو لاگو کرتا ہے: ہر مڈل ویئر جزو ڈیٹا وصول کرتا ہے، اس پر کارروائی کرتا ہے اور زنجیر کی اگلی کڑی کو منتقل کرتا ہے۔ مڈل ویئر کے کنکشن کی ترتیب پروسیسنگ کی ترتیب کا تعین کرتی ہے — پہلا مڈل ویئر خام ڈیٹا وصول کرتا ہے، آخری اسے ہدف ہینڈلر تک پہنچاتا ہے۔ JetBrains (2026) کے مطابق، یہ فن تعمیر موجودہ کوڈ کو تبدیل کیے بغیر مڈل ویئر شامل کرنے یا ہٹانے کی اجازت دیتا ہے، جس سے جانچ اور تجرباتی ماڈیولز کی A/B جانچ آسان ہو جاتی ہے۔

Interceptor سے فرق

مڈل ویئر ایک عام پیٹرن ہے، Interceptor HTTP کے لیے اس کا خصوصی معاملہ ہے۔ مڈل ویئر ڈیٹا کے کسی بھی بہاؤ کے ساتھ کام کرتا ہے: Redux میں actions، Bloc میں واقعات، Ktor میں HTTP درخواستیں۔ Interceptor ہمیشہ نیٹ ورک کی تہہ سے منسلک ہوتا ہے اور صرف Request/Response کے ساتھ کام کرتا ہے۔ اس فرق کو سمجھنا صحیح تجرید کا انتخاب کرنے میں مدد کرتا ہے: صارف کے اعمال کو لاگ کرنے کے لیے — مڈل ویئر، ہیڈر شامل کرنے کے لیے — Interceptor۔ بڑے پروجیکٹس میں، دونوں پیٹرن اکثر ایک ساتھ رہتے ہیں: مڈل ویئر اسٹیٹ کا انتظام کرتا ہے، Interceptor HTTP مواصلات کو سنبھالتا ہے۔

اسٹیٹ مینجمنٹ میں مڈل ویئر

Redux مڈل ویئر reducer تک پہنچنے سے پہلے ہر dispatch action کو روکتا ہے۔ یہ actions کو لاگ کرنے، Redux Thunk یا Redux Saga کے ذریعے غیر متزلزل درخواستیں کرنے، action میں ترمیم کرنے یا شرطی طور پر منسوخ کرنے کی اجازت دیتا ہے۔ ہر مڈل ویئر store (اسٹیٹ تک رسائی)، next (اگلے مڈل ویئر یا reducer کا حوالہ) اور action وصول کرتا ہے، اور فیصلہ کرتا ہے کہ کیا کرنا ہے: action کو آگے بھیجنا، اس میں ترمیم کرنا یا روکنا۔

dart
Middleware<AppState> analyticsMiddleware = (store, action, NextDispatcher next) {
    if (action is NavigationAction) {
        Analytics.logEvent(action.screenName);
    }
    return next(action);
};

final store = Store<AppState>>(
    reducer,
    initialState,
    middleware: [analyticsMiddleware]
);

Flutter Redux کے لیے Dart میں analyticsMiddleware کی مثال۔ مڈل ویئر تمام NavigationAction کو روکتا ہے، اسکرین کا نام تجزیاتی نظام میں لاگ کرتا ہے اور زنجیر جاری رکھنے کے لیے next(action) کو کال کرتا ہے۔ اگر next کو کال نہ کیا جائے تو، action reducer تک نہیں پہنچے گا — اس طرح مشروط نیویگیشن کو لاگو کیا جا سکتا ہے یا ناپسندیدہ actions کو روکا جا سکتا ہے۔ صف میں مڈل ویئر کی ترتیب پروسیسنگ کی ترتیب کا تعین کرتی ہے۔

غیر متزلزل مڈل ویئر: Thunk اور Saga

Redux Thunk ایک مڈل ویئر ہے جو نہ صرف action آبجیکٹ بلکہ فنکشنز بھی بھیجنے کی اجازت دیتا ہے۔ فنکشن dispatch اور getState وصول کرتا ہے، غیر متزلزل کارروائیاں (HTTP کلائنٹ کے ذریعے API درخواستیں، DB سے پڑھنا) کر سکتا ہے اور مکمل ہونے پر عام actions بھیج سکتا ہے۔ Redux ایپلی کیشنز میں نیٹ ورک کی درخواستوں کے لیے یہ معیاری طریقہ ہے۔ Redux Saga مزید پیچیدہ منظرناموں کے لیے جنریٹر (yield) استعمال کرتا ہے: درخواست منسوخی، ریس کنڈیشنز، متوازی کارروائیاں اور صارف ان پٹ ڈیباؤنس۔ Redux Saga (2026) کے مطابق، Saga coroutines nested Thunk callbacks کے مقابلے میں جانچ اور ڈیبگ کرنا آسان ہیں۔

HTTP کلائنٹس میں مڈل ویئر

Ktor Client JetBrains کا پائپ لائن مڈل ویئر پر مبنی HTTP پروسیسنگ بناتا ہے۔ درخواست کا ہر مرحلہ — کنکشن سیٹ اپ، ہیڈر بھیجنا، جواب پڑھنا — پائپ لائن میں ایک علیحدہ مرحلے سے ظاہر ہوتا ہے۔ ڈیولپر client.install { } کے ذریعے پلگ ان (مڈل ویئر) انسٹال کرتا ہے، ایک پروسیسنگ چین حاصل کرتا ہے۔ انسٹالیشن کی ترتیب طے کرتی ہے کہ کون سا مڈل ویئر پہلے ڈیٹا پر کارروائی کرتا ہے: Logging، Auth، ContentNegotiation، Caching۔

kotlin
val client = HttpClient {
    install(Logging) {
        level = LogLevel.BODY
    }
    install(Auth) {
        bearer {
            loadTokens { BearerTokens("access", "refresh") }
        }
    }
    install(ContentNegotiation) {
        json(Json { ignoreUnknownKeys = true })
    }
    install(HttpTimeout) {
        requestTimeoutMillis = 15000
    }
}

انسٹال شدہ مڈل ویئر پلگ ان کے ساتھ Ktor Client کی تشکیل۔ Logging — درخواست اور جواب کا باڈی لکھتا ہے۔ Auth — ریفریش سپورٹ کے ساتھ خود بخود Bearer ٹوکن شامل کرتا ہے۔ ContentNegotiation — JSON کو سیریلائز/ڈی سیریلائز کرتا ہے۔ HttpTimeout — ٹائم آؤٹ سیٹ کرتا ہے۔ ہر پلگ ان آزاد ہے: ٹیسٹ ماحول میں درخواست کوڈ کو تبدیل کیے بغیر کلائنٹ کنفیگریشن تبدیل کر کے Auth کو غیر فعال کیا جا سکتا ہے۔

Flutter میں Dio Interceptor

Dio Flutter کے لیے ایک مقبول HTTP کلائنٹ ہے، جو Interceptor کو مڈل ویئر کے طور پر استعمال کرتا ہے۔ Interceptor بھیجنے سے پہلے RequestOptions اور وصول کرنے کے بعد Response کو روکتا ہے، متعدد انٹرسیپٹرز کی زنجیر کو سپورٹ کرتا ہے۔ Dio Interceptor Dart/Flutter کے لیے OkHttp Interceptor کے مشابہ ہے۔ Dio (2026) کے مطابق، RetryInterceptor اور LogInterceptor Flutter پروجیکٹس میں سب سے زیادہ استعمال ہونے والے مڈل ویئر ہیں۔

Bloc فن تعمیر میں مڈل ویئر

Bloc میں علیحدہ جزو کے طور پر بلٹ ان مڈل ویئر نہیں ہے، لیکن پیٹرن BlocObserver (ایک عالمی مبصر جو ایپلی کیشن میں ہر بلاک سے واقعات وصول کرتا ہے) کے ذریعے لاگو کیا جاتا ہے۔ BlocObserver.onEvent ہر واقعہ پر کارروائی سے پہلے کال کیا جاتا ہے، onTransition ہر اسٹیٹ ٹرانزیشن پر، onError ہر استثنا پر۔ یہ تجزیات، لاگنگ، کریش رپورٹنگ اور کارکردگی کی نگرانی کے لیے ایک مکمل مڈل ویئر ہے۔

dart
class AppBlocObserver extends BlocObserver {
    @override
    void onEvent(Bloc bloc, Object? event) {
        Crashlytics.log("${bloc.runtimeType}: $event");
        super.onEvent(bloc, event);
    }

    @override
    void onTransition(Bloc bloc, Transition transition) {
        Analytics.log(transition.eventName());
        super.onTransition(bloc, transition);
    }

    @override
    void onError(Bloc bloc, Object error, StackTrace stackTrace) {
        Crashlytics.recordError(error, stackTrace);
        super.onError(bloc, error, stackTrace);
    }
}

BlocOverrides.runZoned(() {
    runApp(MyApp());
}, blocObserver: AppBlocObserver());

Dart میں Bloc کے لیے AppBlocObserver کی مثال۔ onEvent ہر واقعہ کو Crashlytics میں لاگ کرتا ہے، onTransition واقعات کو تجزیات میں بھیجتا ہے، onError استثناؤں کو کریش رپورٹنگ میں لکھتا ہے۔ BlocOverrides.runZoned کے ذریعے کنکشن مبصر کو ان کے کوڈ کو تبدیل کیے بغیر تمام بلاکس کے لیے عالمی بنا دیتا ہے۔ ٹیسٹوں میں غیر فعال کرنے کے لیے، خالی مبصر بھیجنا یا BlocOverrides کو اوور رائڈ نہ کرنا کافی ہے۔

مڈل ویئر کب اور کیسے استعمال کریں

مڈل ویئر مؤثر ہے ان کاموں کے لیے جو بہت سے اجزاء کو متاثر کرتے ہیں: لاگنگ، تصدیق، تجزیات، کیشنگ، کارکردگی کی نگرانی۔ مڈل ویئر استعمال کریں جب ایک ہی منطق ایپلی کیشن کے مختلف حصوں میں دہرائی جائے — ہر درخواست میں ٹوکن شامل کرنا، ہر صارف کے عمل کو لاگ کرنا، ہر اسکرین ٹرانزیشن کا تجزیہ۔ Dio (2026) کے مطابق، مڈل ویئر کے ذریعے مرکزی پروسیسنگ بگ کو 25% کم کرتی ہے ہر جزو میں الگ الگ کوڈ کو نقل کرنے کے مقابلے میں۔

  • زیادہ استعمال نہ کریں — ضرورت سے زیادہ مڈل ویئر ڈیبگنگ کو پیچیدہ بناتا ہے اور اضافی کالز کی وجہ سے کارکردگی کم کرتا ہے
  • ترتیب اہم ہے — پہلا مڈل ویئر ڈیٹا اصل شکل میں وصول کرتا ہے، آخری تمام تبدیلیوں کے بعد
  • غیر متزلزل کارروائیاں — بھاری کالز کو غیر متزلزل مڈل ویئر میں منتقل کریں بغیر مرکزی UI تھریڈ کو روکے
  • جانچ کی صلاحیت — ہر مڈل ویئر کو موک ماحول کے ذریعے الگ تھلگ جانچنا چاہیے
  • زنجیر کو دستاویز کریں — واضح طور پر بتائیں کہ پروجیکٹ میں کون سے مڈل ویئر اور کس ترتیب میں منسلک ہیں

مڈل ویئر استعمال کرنے میں عام غلطیاں

سب سے عام غلطی غلط مڈل ویئر ترتیب ہے، جب پہلا انٹرسیپٹر اس ڈیٹا کی توقع کرتا ہے جو دوسرا شامل کرتا ہے۔ دوسری سب سے عام غلطی مرکزی تھریڈ پر مڈل ویئر میں مسدود کرنے والی کارروائیاں ہیں: فائل لکھنا، ہم آہنگ HTTP کالز، خفیہ کاری۔ تیسری استثنا ہینڈلنگ کی کمی ہے: اگر مڈل ویئر استثنا پھینکتا ہے تو، پوری زنجیر ٹوٹ جاتی ہے اور action reducer تک نہیں پہنچے گا یا درخواست نہیں بھیجی جائے گی۔ ہمیشہ مڈل ویئر منطق کو try-catch میں لپیٹیں اور زنجیر کو توڑے بغیر Crashlytics یا Sentry میں خرابیاں لاگ کریں۔ کوڈ کے جائزوں کے دوران باقاعدگی سے مڈل ویئر زنجیر کی جانچ کریں — یہ فن تعمیر کے انحطاط کو روکتا ہے۔

اکثر پوچھے گئے سوالات

مڈل ویئر Interceptor سے کیسے مختلف ہے؟

Interceptor HTTP مواصلات کے لیے مڈل ویئر کا ایک خصوصی معاملہ ہے۔ مڈل ویئر ایک وسیع تر پیٹرن ہے: یہ actions (Redux)، واقعات (Bloc)، HTTP (Ktor) اور ڈیٹا کے کسی بھی بہاؤ کو سنبھال سکتا ہے۔ Interceptor ہمیشہ نیٹ ورک کی تہہ سے منسلک ہوتا ہے اور صرف Request/Response کے ساتھ کام کرتا ہے۔

ٹیسٹ ماحول میں مڈل ویئر کو کیسے غیر فعال کریں؟

فیکٹری طریقہ یا DI کنٹینر (Dagger، Koin، GetIt) استعمال کریں جو dev اور prod کے لیے مڈل ویئر کا مختلف سیٹ لوٹائے۔ Redux میں، ٹیسٹوں میں خالی صف بھیجیں۔ Ktor میں، پلگ ان کے بغیر ٹیسٹ HttpClient استعمال کریں۔ بنیادی اصول — مڈل ویئر کو کوڈ میں ہارڈ کوڈ نہیں ہونا چاہیے۔

کیا مڈل ویئر dispatch کے بعد action میں ترمیم کر سکتا ہے؟

ہاں — مڈل ویئر action کو reducer یا اگلے مڈل ویئر میں بھیجنے سے پہلے اس میں ترمیم کرتا ہے۔ مثال کے طور پر، Redux مڈل ویئر ڈسپیچر کوڈ کو تبدیل کیے بغیر ہر action میں میٹا ڈیٹا (userId، timestamp، deviceId) شامل کر سکتا ہے۔ بنیادی اصول — اصل آبجیکٹ کو تبدیل نہ کریں بلکہ اسپریڈ آپریٹر کے ذریعے نیا بنائیں۔

Ktor میں مڈل ویئر اور Interceptor میں کیا فرق ہے؟

Ktor میں، اصطلاحات قابل تبادلہ ہیں — Ktor Client مڈل ویئر اور پلگ ان ایک ہی چیز ہیں۔ ہر پلگ ان HttpClientPlugin کو لاگو کرتا ہے اور client.install { } کے ذریعے انسٹال ہوتا ہے۔ تمام پلگ ان درخواست پائپ لائن میں شامل ہوتے ہیں، ایک پروسیسنگ چین تشکیل دیتے ہیں۔

Bloc میں مڈل ویئر غلطیوں کو کیسے ہینڈل کرتا ہے؟

BlocObserver.onError کو اوور رائڈ کر کے — ایک عالمی ہینڈلر جو کسی بھی بلاک میں ہر استثنا پر کال کیا جاتا ہے۔ یہ ہر بلاک میں try-catch کا متبادل ہے: ایک مڈل ویئر مرکزی طور پر غلطیوں کو ہینڈل کرتا ہے، انہیں Crashlytics میں لکھتا ہے اور صارف کو snackbar دکھاتا ہے۔

خلاصہ

  • مڈل ویئر ایپلی کیشن کے اجزاء کے درمیان عبوری خدشات کو الگ کرنے کا ایک عالمگیر پیٹرن ہے، جو Interceptor سے وسیع تر ہے۔
  • Redux مڈل ویئر لاگنگ، غیر متزلزل درخواستوں (Thunk) اور پیچیدہ منظرناموں (Saga) کے لیے dispatch کو روکتا ہے۔
  • Ktor Client آزاد Logging، Auth، ContentNegotiation پلگ ان کے ساتھ پائپ لائن کے ذریعے مڈل ویئر کو لاگو کرتا ہے۔
  • BlocObserver Flutter Bloc کے لیے مڈل ویئر ہے: onEvent، onTransition اور onError تمام بلاکس کو عالمی طور پر ہینڈل کرتے ہیں۔
  • Dio Interceptor Flutter کے لیے HTTP-مڈل ویئر ہے جس کی زنجیر OkHttp Interceptor سے مشابہ ہے۔
  • مڈل ویئر کی کنکشن ترتیب ڈیٹا پروسیسنگ کی ترتیب کا تعین کرتی ہے — اسے واضح طور پر دستاویز کریں۔
  • مڈل ویئر کا صحیح استعمال کوڈ کے دہراؤ کو 25-40% کم کرتا ہے اور عبوری خدشات کی یونٹ جانچ کو آسان بناتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں