Sobes.tech
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);
    }
}