Zásadní body
- Middleware představuje strukturované protokoly pro spojení aplikací, což zefektivňuje vývoj a umožňuje účinnou konektivitu.
- Použití middlewaru usnadňuje rychlejší implementaci změn a zpřístupňuje nástroje pro pracovní prostředí.
- Middleware je formou modularity, která je prospěšná pro všechny úrovně programování, od vysoké po nízkoúrovňovou.
Možná jste již slyšeli termín „middleware“ v různých kontextech a chtěli jste zjistit, co přesně to znamená. Ponořme se do světa rozmanitých technologií a procesů, které se pod tímto pojmem skrývají.
Middleware má mnoho významů
Middleware je flexibilní termín, který se používá pro označení mnoha různých věcí. V obecném smyslu si ho můžete představit jako „programy, které fungují mezi jinými programy“. Jinými slovy, jde o jakýkoli software, který se spoléhá na samostatný kód, který poskytuje vstup a zpracovává jeho výstup.
Některé middleware fungují jako kompletní aplikace, které transformují data z jednoho stavu do druhého, s jasně definovanými protokoly a formáty dat pro použití v jiném kódu. Middleware však může být také tak granulární, jako je jedna jediná funkce, která se připojuje k řadě dalších funkcí v rámci daného frameworku.
Stejně jako mnoho jiného softwaru, i middleware využívá principu modularity: rozděluje složitý proces na menší, lépe zvládnutelné části.
Jak middleware funguje?
Síla middlewaru obvykle spočívá v jeho protokolech a veřejně definovaném chování. Přesné protokoly pro komunikaci umožňují programátorům vytvářet software, který splňuje stanovené normy a funguje tak, jak má.
Webový aplikační server slouží jako middleware, který propojuje uživatelské rozhraní webu s logikou a datovým modelem back-endové aplikace a databáze. Protože není pevně spojen se systémy, se kterými komunikuje, je – alespoň teoreticky – možné vyměnit aplikační server za kompatibilní variantu bez nutnosti přepisovat kód aplikace nebo restrukturalizovat databázi.
Komponenty middlewaru často využívají technologie jako JSON, REST, XML a SOAP. Všechny tyto technologie jsou vyspělé, populární a textové, což výrazně usnadňuje výměnu nebo změnu pořadí komponent. Jejich textový formát a široká škála nástrojů také umožňují jednodušší a spolehlivější ladění.
Různé typy middlewaru
Vzhledem k tomu, jak široký je tento pojem, existuje mnoho různých příkladů a aplikací middlewaru. Mezi ty nejběžnější patří:
- Zprostředkovatelé zpráv, kteří dodávají strukturu meziprocesové komunikaci.
- Webové aplikační servery a webové frameworky.
- Herní enginy, které poskytují základní chování, které můžete využít, rozšířit nebo nahradit.
- Platformy pro streamování událostí, jako je Apache Kafka.
Využití middlewaru při vývoji softwaru
Jedním z nejhmatatelnějších využití middlewaru je jeho implementace ve webových frameworkách. Většina frameworků nabízí základní prostředí, které lze přizpůsobit a rozšířit podle specifických potřeb. Často se jedná o předávání HTTP požadavků sérií vestavěných i vlastních funkcí v definovaném pořadí a následné vracení HTTP odpovědi.
Framework Express.js tento model využívá pro podporu přizpůsobení. Následující příklad ukazuje funkci middlewaru napsanou v JavaScriptu:
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
Tato funkce má velmi jednoduchou roli:
Toto poslední volání další funkce je klíčovým krokem v procesu middlewaru a demonstruje všestrannost tohoto přístupu. Pokud se každá funkce middlewaru chová nezávisle, je možné je libovolně zaměňovat a měnit jejich pořadí, což usnadňuje modifikaci chování celého řetězce.
PHP framework Laravel má téměř identické nastavení middlewaru. Všimněte si, jak jmenný prostor explicitně definuje tuto třídu jako „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);
}
}
Role této konkrétní třídy je opět velmi specifická: jejím jediným úkolem je ověřit, zda požadavek obsahuje token. V tomto případě může funkce middlewaru přerušit řetězec, odmítnout volání další funkce a místo toho odeslat přesměrování. Funkce přesměrování vrací příslušný objekt Response, který by funkce middlewaru měla vracet v rámci své podpisové smlouvy.
Následující příklad ukazuje, jak Django, webový framework založený na Pythonu, zpracovává middleware. Django používá termín „plugin“ k popisu své architektury middlewaru, který je podobný dalším pojmům, které se můžete setkat, jako „hook“ nebo „callback“. V podstatě se jedná o další případ nastavení middlewaru, které poskytuje flexibilitu v celém strukturovaném procesu.
def simple_middleware(get_response):
def middleware(request):
response = get_response(request)
return response
return middleware
Pořadí spouštění middlewaru lze ovládat pomocí jednoduchého pole:
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 poskytuje výchozí chování, jako je třída CommonMiddleware, která je užitečná pro většinu aplikací; zakazuje přístup určitým „špatným“ uživatelským agentům a řeší normalizaci URL adres. Je běžné, že klíčový middleware zaměřený na zabezpečení se spouští na začátku procesu, ale tato flexibilita umožňuje přizpůsobit pořadí dle potřeb vaší konkrétní aplikace.
Proč je middleware užitečný?
Middleware usnadňuje spojování aplikací, které původně nebyly navrženy pro vzájemnou komunikaci. Poskytuje funkce pro jejich integraci spolu s robustními, strukturovanými protokoly, pomocí kterých mohou tyto aplikace komunikovat.
V důsledku toho má middleware několik významných výhod, včetně:
- Zjednodušený vývoj aplikací a zkrácení času potřebného k jejich uvedení na trh.
- Efektivní konektivita.
- Rychlejší implementace změn.
- Snadno dostupné pracovní nástroje.
Middleware je v podstatě formou modularity, konceptu, který je výhodný při aplikaci na všechny úrovně programování, od těch nejvyšších po ty nejnižší.