Middle
Программаларда middleware эмне үчүн колдонулат?
sobes.tech AI
AIден жооп
Веб-колдонмолордо аралык программалык камсыздоо — бул HTTP суроо-талаптары жана жоопторун иштеткен аралык программалык камсыздоо. Ал веб-сервер менен колдонмонун негизги логикасынын ортосунда жайгашкан.
Аралык программалык камсыздоонун негизги милдеттери:
- Суроону алдын ала иштетүү:
- Колдонуучунун аутентификациясы жана уруксат берүү.
- Кирүү маалыматтарын талдоо (JSON, XML жана башка).
- Суроонун маалыматтарын текшерүү.
- Суроолорду журналга жазуу.
- Суроого башталыштарды кошуу.
- Жоопту кийинчерээк иштетүү:
- Жоопту өзгөртүү, аны жөнөтүүдөн мурун (мисалы, башталыштарды кошуу):
- Жоопту кысуу.
- Каталар менен иштөө (чыгаруулар):
- Иштин агымын башкаруу: Аралык программалык камсыздоо суроо иштетүүнү үзгүлтүккө учуратпайт жана жоопту эрте стадияда кайтарат (мисалы, укук жоктугу учурда).
Аралык программалык камсыздоону колдонуу артыкчылыктары:
- Модулдук: милдеттерди бөлүү, кайра колдонулуучу компоненттерге бөлүү.
- Ийкемдүү: негизги логиканы өзгөртпөстөн функцияларды оңой кошуу же алып салуу.
- Коддун окуулушу: программаны түзүүнүн структурасын жакшыртуу, үзгүлтүксүз операцияларды бөлүп көрсөтүү аркылуу.
- Тестирлөө мүмкүнчүлүгү: жеке аралык программалык камсыздоо оңой тесттелет.
PHP-фреймворктарда (мисалы, Laravel, Symfony, Slim) аралык программалык камсыздоо көбүнесе класстар түрүндө ишке ашырылат, алар белгилүү интерфейсти ишке ашырат:
<?php
// Аралык программалык камсыздоонун структурасынын мисалы (интерфейс)
interface RequestHandlerInterface {
public function handle(RequestInterface $request): ResponseInterface;
}
// Аралык программалык камсыздоонун ишке ашырылышы (авторизация)
class AuthenticationMiddleware implements RequestHandlerInterface {
public function handle(RequestInterface $request): ResponseInterface {
// Авторизацияны текшерүү
if (!isAuthenticated()) {
// Эгер колдонуучу авторизацияланбаган болсо, ишти үзгүлтүккө учуратуу жана каттоо
return new Response(401, [], 'Unauthorized');
}
// Эгер бардык нерсе жакшы болсо, суроону кийинки иштетүүчүгө өткөрүү (же негизги логикага)
return $this->nextHandler->handle($request);
}
}