Contents

Vad är middleware?

Snabblänkar

⭐ Middleware betyder många saker

⭐ Hur fungerar middleware?

⭐ Olika typer av middleware

⭐ Använda middleware i mjukvaruutveckling

⭐ Varför är middleware användbart?

Viktiga takeaways

Middleware fungerar som en facilitator för att ansluta olika applikationer genom att tillhandahålla välstrukturerade kommunikationsprotokoll som förbättrar effektiviteten i utvecklingen och samtidigt främjar sömlös interkonnektivitet.

Middleware underlättar en snabb implementering av justeringar, samtidigt som det erbjuder användarvänliga resurser i arbetsmiljön.

Middleware är ett exempel på modularisering som ger fördelar på olika programmeringsnivåer, från högnivå- till lågnivåapplikationer.

I olika sammanhang kan man stöta på termen “middleware” och bli nyfiken på vilken specifik teknik eller process som avses. Termen omfattar ett brett spektrum av verktyg och procedurer som kan användas för att underlätta kommunikationen mellan olika programvarusystem.

Middleware betyder många saker

Middleware har olika definitioner beroende på sammanhanget, men kan i sin mest allmänna tolkning förstås som “programvaruapplikationer som fungerar mellan andra programvarusystem”. Denna beskrivning antyder att middleware fungerar genom att förlita sig på externa programmeringskoder för att tillhandahålla indata och bearbeta utdata.

Vissa typer av middleware är omfattande applikationer som kan omvandla information mellan olika tillstånd genom att använda etablerade kommunikationsstandarder och dataarkitekturer, vilket underlättar sömlös integration med andra programvarukomponenter. Å andra sidan är en del middleware ganska minimalistisk till sin natur, i form av enskilda funktioner eller moduler som kopplas direkt till arbetsflödesprocesserna i ett visst ramverk.

Middleware drar nytta av modularitetsprincipen, som innebär att komplicerade processer delas upp i enklare komponenter för förbättrad hantering.

Hur fungerar middleware?

Middleware får sin styrka genom att följa etablerade protokoll och väldefinierade offentliga interaktioner. Rigorösa riktlinjer för kommunikation gör det möjligt för utvecklare att producera programvara som överensstämmer med branschstandarder, vilket säkerställer optimal prestanda.

En webbapplikationsserver fungerar som en mellanhand mellan användargränssnittet på en webbplats och den backend-logik och datastruktur som tillhandahålls av en applikation och dess tillhörande databas. Eftersom den är frikopplad från de system som interagerar med den är det teoretiskt sett möjligt att ersätta en applikationsserver med ett jämförbart alternativ utan att behöva göra ändringar i den underliggande kodbasen eller omkonfigurera databasschemat.

Middleware-komponenter utnyttjar ofta tekniker som JSON, REST, XML och SOAP. Dessa är etablerade, allmänt använda och textbaserade till sin natur, vilket underlättar sömlös ersättning eller modifiering av enskilda komponenter. Deras textbaserade struktur och omfattande utbud av utvecklingsverktyg möjliggör dessutom förenklad och tillförlitlig felsökning och felavhjälpning.

Olika typer av middleware

På grund av sin expansiva natur omfattar middleware ett brett spektrum av instanser och applikationer. Några illustrativa exempel på en sådan mångfald inkluderar:

Kommunikation mellan processer kan struktureras med hjälp av meddelandebrokers.

⭐Webbappserver och webbramverk.

Spelmotorer förses med en grund av standardfunktioner som kan byggas på, modifieras eller kasseras helt. Dessa grundläggande element gör det möjligt att skapa och utveckla spelvärldar utan att behöva bygga allt från grunden. Genom att använda dessa förutbestämda mekanismer får utvecklarna mer tid och resurser att fokusera på att skapa unika upplevelser i sina spel i stället för att ägna sig åt grundläggande funktioner som att rendera grafik eller hantera användarinmatning.

⭐Händelsestreamingplattformar som Apache Kafka.

Använda middleware i programvaruutveckling

Middleware spelar en pragmatisk roll inom webbutveckling genom att erbjuda en grund för webbramverk att bygga vidare på. Vanligtvis tillhandahåller dessa ramverk en förkonfigurerad miljö som kan skräddarsys för att passa specifika behov. I huvudsak innebär detta att inkommande HTTP-förfrågningar bearbetas genom en förutbestämd sekvens av både standardiserade och användardefinierade funktioner, som kulminerar i genereringen av ett lämpligt HTTP-svar.

Express.js-ramverket utnyttjar detta koncept för att underlätta personliga konfigurationer. Ta ett exempel på en mellanliggande funktion som är skriptad i JavaScript:

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

Funktionen är extremt enkel:

Applikationen är utformad för att hantera URL-sökvägar som följer ett visst mönster, som börjar med " /user/" och efter detta en identifierare.

Systemet samlar in information om vilken typ av förfrågningsmetod som använts, inklusive alternativ som GET eller POST.

Programmet fortsätter med att anropa den angivna funktionen efter det att den aktuella satsen av mellanvaruoperationer har slutförts, för att fortsätta med sekvensen av mellanliggande funktioner.

Den avslutande anropningen av next() inom sekvensen av mellanliggande operationer fungerar som ett väsentligt element i den övergripande processen, vilket visar hur anpassningsbar denna metodik är. Så länge enskilda mellanvarukomponenter fungerar självständigt är det möjligt att enkelt ersätta eller omorganisera deras ordning, vilket ger betydande flexibilitet när det gäller att utforma hela kedjans beteende.

Laravel är ett populärt PHP-ramverk för webbutveckling som använder middleware i stor utsträckning för att hantera HTTP-förfrågningar och svar. En av de viktigaste funktionerna är dess flexibla middleware-system, som gör det möjligt för utvecklare att definiera anpassade beteenden baserat på specifika krav. Faktum är att namnkonventionen som används i Laravels middleware-installation liknar den för andra klasser inom ramverket, med namnrymder som ger uttrycklig indikation på deras syfte som “middleware”. Detta designval främjar konsekvens och användarvänlighet bland utvecklare som arbetar med Laravel, vilket i slutändan effektiviserar processen att implementera komplex applikationslogik genom dess robusta middleware-arkitektur.

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

Syftet med denna exakta modul är anmärkningsvärt specialiserat; den granskar i huvudsak begäran för att säkerställa att den innehåller en förutbestämd token. Följaktligen har mellanfunktionen möjlighet att avbryta ytterligare bearbetning genom att kringgå den efterföljande operationen och i stället initiera en omdirigering. Denna process innefattar generering av ett lämpligt svarsobjekt, som måste returneras av mellanvarukomponenten som ett uppfyllande av dess åtaganden som beskrivs i det kontraktuella avtalet.

Django, en allmänt använd Python-driven webbutvecklingsplattform, exemplifierar sin hantering av middleware genom att beteckna sådana komponenter som “plugins”. Jämförbar terminologi inkluderar “krokar” och “callbacks”, som alla bidrar till den övergripande anpassningsförmåga som finns i Djangos mellanvarustruktur. I grund och botten erbjuder denna konfiguration ytterligare ett exempel på mångsidighet inom ett systematiskt organiserat arbetsflöde.

 def simple_middleware(get_response):
    # One-time configuration and initialization.

    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        response = get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

    return middleware 

Du har möjlighet att manipulera exekveringssekvensen för dina valda middlewares genom att använda en array-konfiguration. Detta gör det enkelt att hantera och välja önskade middlewares som ska exekveras i en specifik ordning.

 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 erbjuder en fördefinierad implementering genom sin CommonMiddleware-klass som är fördelaktig för många applikationer. Detta ramverk förhindrar obehörig åtkomst genom att filtrera bort problematiska användaragenter samtidigt som det hanterar URL-standardisering. Placeringen av kritisk, säkerhetsorienterad middleware kan variera baserat på individuella krav, vilket möjliggör skräddarsydd ordning inom bearbetningspipelinen.

Varför är middleware användbart?

Middleware underlättar interoperabilitet mellan programvarusystem som ursprungligen inte var avsedda för integration, och tillhandahåller ett sätt att integrera och kommunicera mellan dem genom välstrukturerade och robusta protokoll.

Fördelarna med att använda middleware är många och inkluderar:

Processen för att utveckla applikationer har effektiviserats, vilket resulterar i en kortare tidsram för att ta produkter till marknaden.

⭐Effektiva anslutningsmöjligheter.

⭐Snabbare överföring av förändringar.

⭐Lättåtkomliga verktyg på arbetsplatsen.

Middleware är ett uttryck för modularitet, en princip som är giltig för olika nivåer av programmeringsparadigm, allt från arkitektur på makronivå till implementeringsdetaljer på mikronivå.