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);
}
}