Sobes.tech
Middle

Ilovalar uchun middleware nima uchun ishlatiladi?

sobes.tech AI

AIdan javob

Veb-ilovalarida middleware — bu HTTP so'rovlar va javoblarni qayta ishlovchi vositachi dasturiy ta'minot. U veb-server va ilovaning asosiy mantiqi o'rtasida joylashgan.

Middlewarening asosiy vazifalari:

  • So'rovni oldindan ishlash:
    • Foydalanuvchining autentifikatsiyasi va ruxsat berilishi.
    • Kiritilayotgan so'rov ma'lumotlarini (JSON, XML va boshqalar) tahlil qilish.
    • So'rov ma'lumotlarini tekshirish.
    • So'rovlarni log qilish.
    • So'rovga sarlavhalar qo'shish.
  • Javobni keyingi ishlash:
    • Javobni mijozga yuborishdan oldin o'zgartirish (masalan, sarlavhalar qo'shish).
    • Javobni siqish.
    • Xatoliklarni boshqarish (istisnolar).
  • Ijro oqimini boshqarish: Middleware so'rovni to'xtatishi va dastlabki bosqichda javob qaytarishi mumkin (masalan, kirish huqumlari bo'lmasa).

Middlewaredan foydalanishning afzalliklari:

  • Modullilik: Vazifalarni mustaqil va qayta ishlatiladigan komponentlarga bo'lish.
  • Moslashuvchanlik: Asosiy mantiqni o'zgartirmasdan funksionallikni qo'shish yoki olib tashlash.
  • Kodning o'qilishi: Umumiy operatsiyalarni ajratish orqali ilova tuzilishini yaxshilash.
  • Test qilish imkoniyati: Individual middlewarelarni izolyatsiya qilish osonroq.

PHP frameworklarida (Laravel, Symfony, Slim kabi) middleware ko'pincha ma'lum interfeysni amalga oshiradigan sinflar shaklida amalga oshiriladi.

<?php

// Middleware tuzilmasi misoli (interfeys)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// Middlewareni amalga oshirish misoli (autentifikatsiya)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // Autentifikatsiya tekshiruvi
        if (!isAuthenticated()) {
            // Agar foydalanuvchi autentifikatsiyadan o'tmagan bo'lsa, bajarishni to'xtatib, xato qaytaradi
            return new Response(401, [], 'Unauthorized');
        }

        // Agar hammasi yaxshi bo'lsa, so'rovni keyingi ishlovchiga yuboradi
        return $this->nextHandler->handle($request);
    }
}