Ce este Middleware-ul?

Recomandări cheie

  • Middleware oferă protocoale structurate pentru conectarea aplicațiilor, simplificând dezvoltarea și permițând conectivitate eficientă.
  • Middleware permite o tranziție mai rapidă a schimbărilor și oferă instrumente ușor accesibile la locul de muncă.
  • Middleware-ul este o formă de modularitate care aduce beneficii tuturor formelor de programare, de la nivel înalt la nivel scăzut.

S-ar putea să fi auzit că oamenii folosesc termenul „middleware” în diverse contexte și s-au întrebat despre ce vorbesc. Descoperiți setul larg și bogat de tehnologii și procese la care s-ar putea referi.

Middleware înseamnă multe lucruri

Middleware este un termen flexibil pe care oamenii îl folosesc pentru a însemna lucruri diferite. În cel mai larg sens posibil, poți să te gândești la el ca „programe care rulează între alte programe”. Cu alte cuvinte, orice software care depinde de cod separat pentru a-și furniza intrarea și a procesa ieșirea.

Unele middleware există ca o aplicație completă care transformă datele dintr-o stare în alta, cu protocoale și formate de date bine definite pentru utilizarea altor coduri. Dar middleware-ul poate fi, de asemenea, la fel de granular ca o singură funcție, agățându-se într-o serie de alte funcții pe care le rulează un cadru.

La fel ca multe programe software, middleware-ul profită de conceptul de modularitate: descompunerea unui proces complex în bucăți mai mici, mai ușor de gestionat.

Cum funcționează middleware-ul?

Middleware-ul este de obicei la fel de puternic ca protocoalele și comportamentul definit public. Protocoalele stricte de comunicare permit programatorilor să scrie software care respectă standardele pentru a funcționa corect.

Un server de aplicații web acționează ca middleware pentru a conecta experiența front-end a unui site web cu logica și modelul de date pe care le oferă o aplicație și o bază de date back-end. Deoarece nu este strâns cuplat cu sistemele care comunică cu acesta, puteți, cel puțin, în teorie, să schimbați un server de aplicații cu unul compatibil fără a fi nevoie să rescrieți codul aplicației sau să vă restructurați baza de date.

Componentele middleware folosesc adesea tehnologii precum JSON, REST, XML și SOAP. Toate acestea sunt mature, populare și bazate pe text, ceea ce face mult mai ușoară schimbarea sau reordonarea componentelor. Formatul lor bazat pe text și gama largă de seturi de instrumente permit, de asemenea, o depanare mai ușoară și mai fiabilă.

Diferite tipuri de middleware

Deoarece termenul este atât de larg, există multe exemple diferite de, și utilizări pentru, middleware. Unele dintre cele mai comune includ:

  • Brokeri de mesaje, care adaugă structură comunicării între procese.
  • Server de aplicații web și cadre web.
  • Motoare de joc, care oferă un comportament implicit pe care îl puteți utiliza, extinde sau înlocui.
  • Platforme de streaming de evenimente precum Apache Kafka.

Utilizarea middleware-ului în dezvoltarea software-ului

Una dintre cele mai tangibile utilizări ale middleware-ului este prin intermediul cadrelor web. Majoritatea cadrelor oferă un mediu de bază pe care îl puteți personaliza și extinde la propriile cerințe. Modelul implică adesea trecerea solicitărilor HTTP printr-o serie de funcții încorporate și personalizate, într-o ordine definită și returnarea unui răspuns HTTP la sfârșit.

Cadrul Express.js folosește acest model pentru a sprijini personalizarea. Luați acest exemplu de funcție middleware scrisă în JavaScript:

 app.use('/user/:id', (req, res, next) => {
  console.log('Request Type:', req.method)
  next()
})

Funcția este simplă în extrem:

  • Procesează anumite adrese URL care încep „/utilizator/”, urmate de un id.
  • Înregistrează tipul de metodă de solicitare care poate fi GET, POST etc.
  • Apoi apelează o funcție furnizată pentru a continua procesarea lanțului de funcții middleware.
  • Apelul final la următorul este un pas vital în procesul middleware și demonstrează cât de versatilă poate fi abordarea. Atâta timp cât fiecare funcție de middleware se comportă independent, le puteți schimba în și în afara și reordona comportamentul întregului lanț cu ușurință.

    Cadrul PHP, Laravel, are o configurație middleware aproape identică. Observați cum spațiul de nume definește în mod explicit această clasă ca „Middleware”.

     namespace App\Http\Middleware;

    use Closure;
    use Illuminate\Http\Request;
    use Symfony\Component\HttpFoundation\Response;

    class EnsureTokenIsValid
    {
        
         * Handle an incoming request.
         */
        public function handle(Request $request, Closure $next): Response
        {
            if ($request->input('token') !== 'my-secret-token') {
                return redirect('home');
            }

            return $next($request);
        }
    }

    Din nou, rolul acestei clase este foarte specific: tot ce face este să verifice cererea pentru a vedea dacă conține un token. În acest caz, funcția middleware poate rupe lanțul, refuzând să apeleze următoarea funcție și, în schimb, trimițând o redirecționare. Funcția de redirecționare va returna un obiect Response adecvat, pe care funcția middleware ar trebui să-l returneze ca parte a contractului său de semnătură.

    Acest exemplu final arată cum Django, un cadru web bazat pe Python, gestionează middleware. Django folosește termenul „plugin” pentru a descrie arhitectura sa middleware, care este similară cu alți termeni relevanți pe care îi puteți auzi, cum ar fi „hook” sau „callback”. În esență, este pur și simplu un alt caz de configurare middleware care oferă flexibilitate pe parcursul unui proces structurat.

     def simple_middleware(get_response):
        

        def middleware(request):
            
            

            response = get_response(request)

            
            

            return response

        return middleware

    Puteți controla apoi ce middleware rulează și în ce ordine, cu o matrice simplă:

     MIDDLEWARE = [
        "django.middleware.security.SecurityMiddleware",
        "django.contrib.sessions.middleware.SessionMiddleware",
        "django.middleware.common.CommonMiddleware",
        "django.middleware.csrf.CsrfViewMiddleware",
        "django.contrib.auth.middleware.AuthenticationMiddleware",
        "django.contrib.messages.middleware.MessageMiddleware",
        "django.middleware.clickjacking.XFrameOptionsMiddleware",
    ]

    Django oferă un comportament implicit, cum ar fi clasa CommonMiddleware de care vor beneficia majoritatea aplicațiilor; interzice accesul la anumiți agenți utilizatori „răi” și se ocupă de normalizarea URL-urilor. Este destul de obișnuit ca middleware-ul esențial, concentrat pe securitate să ruleze devreme, dar această flexibilitate vă permite să personalizați comanda în funcție de nevoile aplicației dvs.

    De ce este util middleware-ul?

    Middleware-ul facilitează conectarea aplicațiilor care nu au fost concepute pentru a fi conectate. Oferă funcționalitate pentru integrarea acestora, împreună cu protocoale robuste și structurate prin care pot comunica.

    Ca rezultat, middleware-ul are câteva beneficii importante, inclusiv:

    • Dezvoltarea eficientă a aplicațiilor și timpul de lansare pe piață redus.
    • Conectivitate eficientă.
    • Tranziție mai rapidă a schimbărilor.
    • Instrumente la locul de muncă ușor accesibile.

    În cele din urmă, middleware-ul este o formă de modularitate, un concept care este benefic atunci când este aplicat tuturor formelor de programare, de la cel mai înalt nivel până la cel mai de jos.