
Hovedpoeng
- Mellomvare etablerer organiserte metoder for å sammenkoble applikasjoner, forenkler utviklingsprosessen og legger til rette for effektiv kommunikasjon.
- Mellomvare muliggjør raskere implementering av endringer og sikrer tilgang til nyttige verktøy.
- Mellomvare fungerer som en modularitetsform som er gunstig for alle programmeringsnivåer, fra de mest abstrakte til de mest konkrete.
Du har muligens støtt på begrepet «mellomvare» i forskjellige sammenhenger og lurt på hva det faktisk innebærer. La oss utforske det brede spekteret av teknologier og prosesser som dette uttrykket kan dekke.
Mellomvare kan bety mange ting
Mellomvare er et allsidig begrep som brukes med ulike betydninger. I sin bredeste forstand kan det forstås som «programvare som opererer mellom andre programmer». Med andre ord, all programvare som er avhengig av separat kode for å motta input og bearbeide output.
Noen former for mellomvare fungerer som komplette applikasjoner som transformerer data fra en tilstand til en annen, med spesifiserte protokoller og dataformater som annen kode kan benytte. Likevel kan mellomvare også være så detaljert som en enkelt funksjon, integrert i en rekke andre funksjoner gjennom et rammeverk.
Som mye annen programvare, drar mellomvare nytte av modularitetsprinsippet: å oppdele en kompleks prosess i mindre, mer overkommelige deler.
Hvordan fungerer mellomvare?
Mellomvarens effektivitet er i stor grad avhengig av protokollene og de offentlig definerte atferdsmønstrene. Presise kommunikasjonsprotokoller gir utviklere muligheten til å skrive programvare som overholder standarder for korrekt funksjon.
En nettapplikasjonsserver tjener som mellomvare for å koble en brukers opplevelse av et nettsted med den underliggende logikken og datamodellen som en backend-applikasjon og database tilbyr. Fordi den ikke er tett koblet til systemene den samhandler med, er det – i teorien – mulig å erstatte en appserver med en kompatibel en uten å måtte skrive om applikasjonskoden eller omstrukturere databasen.
Mellomvarekomponenter gjør ofte bruk av teknologier som JSON, REST, XML og SOAP. Disse er veletablerte, populære og tekstbaserte, noe som gjør det mye enklere å bytte ut eller omorganisere komponenter. Det tekstbaserte formatet og det brede spekteret av verktøy gjør også feilsøking enklere og mer pålitelig.
Ulike typer mellomvare
Siden begrepet er så omfattende, finnes det mange ulike eksempler og bruksområder for mellomvare. Noen av de mest vanlige inkluderer:
- Meldingsformidlere, som strukturerer kommunikasjon mellom prosesser.
- Webapplikasjonsservere og webrammeverk.
- Spillmotorer, som tilbyr standardfunksjoner som du kan bruke, utvide eller erstatte.
- Hendelsesstrømningsplattformer som Apache Kafka.
Bruk av mellomvare i programvareutvikling
En av de mest konkrete måtene å bruke mellomvare på er gjennom webrammeverk. De fleste rammeverk tilbyr et kjernemiljø som du kan tilpasse og utvide for å møte dine spesifikke krav. Denne modellen innebærer ofte å sende HTTP-forespørsler gjennom en rekke forhåndsdefinerte og tilpassede funksjoner, i en bestemt rekkefølge, og returnere et HTTP-svar til slutt.
Express.js-rammeverket benytter seg av denne modellen for å støtte tilpasning. Her er et eksempel på en mellomvarefunksjon skrevet i JavaScript:
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
Denne funksjonen er svært enkel:
- Den behandler spesifikke URL-er som begynner med «/user/», etterfulgt av en id.
- Den logger typen forespørselsmetode, som kan være GET, POST, osv.
- Deretter kaller den en gitt funksjon for å fortsette behandlingen av kjeden av mellomvarefunksjoner.
Det siste kallet til `next()` er et sentralt element i mellomvareprosessen og illustrerer allsidigheten til denne tilnærmingen. Så lenge hver mellomvarefunksjon opererer uavhengig, kan du enkelt bytte dem ut og omorganisere oppførselen til hele kjeden.
PHP-rammeverket Laravel har et nesten identisk mellomvareoppsett. Merk deg hvordan navnerommet eksplisitt definerer denne klassen 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); } }
Igjen er rollen til denne spesifikke klassen svært avgrenset: den sjekker kun om forespørselen inneholder et token. I dette tilfellet kan mellomvarefunksjonen avbryte kjeden, nekte å kalle den neste funksjonen, og i stedet sende en omdirigering. Omdirigeringsfunksjonen vil returnere et passende Response-objekt, som mellomvarefunksjonen skal returnere som en del av sin kontrakt.
Dette siste eksemplet viser hvordan Django, et Python-basert webrammeverk, håndterer mellomvare. Django bruker begrepet «plugin» for å beskrive sin mellomvarearkitektur, som ligner på andre relevante begreper som du kanskje hører, som «hook» eller «callback». I bunn og grunn er det rett og slett et annet tilfelle av et mellomvareoppsett som gir fleksibilitet gjennom en strukturert prosess.
def simple_middleware(get_response): def middleware(request): response = get_response(request) return response return middleware
Du kan deretter styre hvilken mellomvare som kjører, og i hvilken rekkefølge, ved hjelp av en enkel matrise:
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 leverer standardfunksjonalitet via CommonMiddleware-klassen som de fleste applikasjoner vil dra nytte av; den hindrer tilgang for visse «uønskede» brukeragenter og håndterer URL-normalisering. Det er vanlig at kritisk, sikkerhetsfokusert mellomvare kjøres tidlig i prosessen, men denne fleksibiliteten lar deg tilpasse rekkefølgen avhengig av behovene til din applikasjon.
Hvorfor er mellomvare nyttig?
Mellomvare gjør det enklere å koble sammen programmer som ikke opprinnelig var ment å være koblet sammen. Den tilbyr funksjoner for å integrere dem, sammen med robuste, strukturerte protokoller de kan kommunisere via.
Som et resultat gir mellomvare flere viktige fordeler, inkludert:
- Forenklet applikasjonsutvikling og redusert tid til markedet.
- Effektiv tilkobling.
- Raskere overgang ved endringer.
- Lett tilgjengelige arbeidsverktøy.
I bunn og grunn er mellomvare en form for modularitet, et konsept som er gunstig når det brukes i alle former for programmering, fra det mest abstrakte nivået til det mest konkrete.