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