Innehållsförteckning
Viktiga takeaways
- Middleware tillhandahåller strukturerade protokoll för att ansluta applikationer, effektivisera utvecklingen och möjliggöra effektiv anslutning.
- Middleware möjliggör snabbare övergång av förändringar och ger lättillgängliga arbetsplatsverktyg.
- Middleware är en form av modularitet som gynnar alla former av programmering, från högnivå till lågnivå.
Du kanske har hört folk använda termen ”mellanprogram” i olika sammanhang och undrat vad det är de pratar om. Upptäck den breda och rika uppsättningen av teknologier och processer som de kan syfta på.
Mellanvara betyder många saker
Middleware är en flexibel term som människor använder för att betyda olika saker. I vidaste möjliga bemärkelse kan du tänka på det som ”program som körs mellan andra program”. Med andra ord, all programvara som är beroende av separat kod för att tillhandahålla sin input och bearbeta dess utdata.
En del mellanprogram existerar som en komplett applikation som omvandlar data från ett tillstånd till ett annat, med väldefinierade protokoll och dataformat för annan kod att använda. Men mellanprogram kan också vara så granulärt som en enda funktion och kopplas in i en rad andra funktioner som ett ramverk kör.
Precis som många andra program, utnyttjar middleware konceptet modularitet: att bryta ner en komplex process i mindre, mer hanterbara delar.
Hur fungerar Middleware?
Middleware är vanligtvis lika stark som dess protokoll och offentligt definierade beteende. Strikta protokoll för kommunikation tillåter programmerare att skriva programvara som följer standarder för att fungera korrekt.
En webbapplikationsserver fungerar som mellanprogram för att koppla en användares front-end-upplevelse av en webbplats med logiken och datamodellen som en back-end-applikation och databas tillhandahåller. Eftersom den inte är tätt kopplad till systemen som kommunicerar med den kan du – åtminstone i teorin – byta ut en appserver mot en kompatibel utan att behöva skriva om applikationskoden eller strukturera om din databas.
Middleware-komponenter använder ofta teknologier som JSON, REST, XML och SOAP. Dessa är alla mogna, populära och textbaserade, vilket gör det mycket lättare att byta ut eller ordna om komponenter. Deras textbaserade format och breda utbud av verktygsuppsättningar möjliggör också enklare och mer tillförlitlig felsökning.
Olika typer av mellanvara
Eftersom termen är så bred finns det många olika exempel på och användningsområden för mellanprogram. Några av de vanligaste inkluderar:
- Meddelandeförmedlare, som lägger till struktur till kommunikation mellan processer.
- Webbappserver och webbramverk.
- Spelmotorer, som tillhandahåller standardbeteende som du kan använda, utöka eller ersätta.
- Evenemangsströmningsplattformar som Apache Kafka.
Använda Middleware i mjukvaruutveckling
En av de mest påtagliga användningarna av mellanprogram är via webbramverk. De flesta ramverk tillhandahåller en kärnmiljö som du kan anpassa och utöka efter dina egna krav. Modellen går ofta ut på att skicka HTTP-förfrågningar genom en serie inbyggda och anpassade funktioner, i en definierad ordning, och returnera ett HTTP-svar i slutet.
Express.js-ramverket använder denna modell för att stödja anpassning. Ta det här exemplet på en middleware-funktion skriven i JavaScript:
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
Funktionen är ytterst enkel:
Det sista samtalet till nästa är ett viktigt steg i mellanprogramprocessen och visar hur mångsidigt tillvägagångssättet kan vara. Så länge som varje middleware-funktion beter sig oberoende kan du byta in och ut dem och enkelt ändra hela kedjans beteende.
PHP-ramverket, Laravel, har en nästan identisk middleware-inställning. Lägg märke till hur namnutrymmet uttryckligen definierar denna klass som ”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);
}
}
Återigen, rollen för denna speciella klass är mycket specifik: allt den gör är att kontrollera begäran för att se om den innehåller en token. I det här fallet kan middleware-funktionen bryta kedjan, vägra anropa nästa funktion och istället skicka en omdirigering. Omdirigeringsfunktionen kommer att returnera ett lämpligt Response-objekt, som mellanprogramsfunktionen bör returnera som en del av sitt signaturkontrakt.
Det här sista exemplet visar hur Django, ett Python-baserat webbramverk, hanterar mellanprogram. Django använder termen ”plugin” för att beskriva sin middleware-arkitektur, som liknar andra relevanta termer du kan höra som ”hook” eller ”callback”. I grund och botten är det helt enkelt ytterligare ett fall av en middleware-installation som ger flexibilitet genom en strukturerad process.
def simple_middleware(get_response):
def middleware(request):
response = get_response(request)
return response
return middleware
Du kan sedan styra vilken mellanprogram som körs, och i vilken ordning, med en enkel array:
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 tillhandahåller standardbeteende som CommonMiddleware-klassen som de flesta appar kommer att dra nytta av; den förbjuder åtkomst till vissa ”dåliga” användaragenter och hanterar URL-normalisering. Det är ganska vanligt att verksamhetskritisk, säkerhetsfokuserad mellanprogram körs tidigt i pipelinen, men denna flexibilitet låter dig anpassa ordningen beroende på din apps behov.
Varför är mellanprogram användbart?
Middleware gör det lättare att ansluta applikationer som inte är designade för att anslutas. Det ger funktionalitet för att integrera dem, tillsammans med robusta, strukturerade protokoll genom vilka de kan kommunicera.
Som ett resultat har mellanprogram några viktiga fördelar, inklusive:
- Effektiviserad applikationsutveckling och kortare tid till marknaden.
- Effektiv anslutning.
- Snabbare övergång av förändringar.
- Lättillgängliga arbetsplatsverktyg.
I slutändan är middleware en form av modularitet, ett koncept som är fördelaktigt när det tillämpas på alla former av programmering, från den högsta nivån ända ner till den lägsta.