Sobes.tech
Middle

Τι είναι το middleware;

sobes.tech AI

Απάντηση από AI

Το ενδιάμεσο λογισμικό (middleware) είναι ένα στρώμα λογισμικού ή πλαίσιο που επεξεργάζεται τις εισερχόμενες αιτήσεις HTTP πριν φτάσουν στον τελικό χειριστή (π.χ. ελεγκτή), και τις εξερχόμενες απαντήσεις HTTP μετά την επεξεργασία. Εκτελεί διάφορες ενέργειες: αυθεντικοποίηση, εξουσιοδότηση, καταγραφή, τροποποίηση αιτήματος/απάντησης κ.λπ. Τα middleware σχηματίζουν συνήθως μια γραμμή (pipeline), όπου κάθε middleware εκτελεί τη λειτουργία του και μεταβιβάζει το αίτημα στον επόμενο ή στον τελικό χειριστή.

Παράδειγμα σε PHP (χρησιμοποιώντας PSR-7/PSR-15):

<?php

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class AuthenticationMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Έλεγχος αυθεντικοποίησης χρήστη
        if (!$this->isAuthenticated($request)) {
            // Αν ο χρήστης δεν είναι αυθεντικοποιημένος, επιστρέφουμε σφάλμα
            return new \Slim\Psr7\Response(401); // Παράδειγμα δημιουργίας PSR-7 απάντησης
        }

        // Αν ο χρήστης είναι αυθεντικοποιημένος, περνάμε το αίτημα στον επόμενο χειριστή
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Λογική ελέγχου αυθεντικοποίησης (π.χ. επικεφαλίδες, συνεδρία κ.λπ.)
        return true; // Θ placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Καταγραφή πληροφοριών σχετικά με το αίτημα πριν από την επεξεργασία
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Μεταβίβαση του αιτήματος στον επόμενο χειριστή και λήψη απάντησης
        $response = $handler->handle($request);

        // Καταγραφή πληροφοριών σχετικά με την απάντηση μετά την επεξεργασία
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Επιστροφή της απάντησης
        return $response;
    }
}

// Παράδειγμα χρήσης σε δρομολογητή (απλοποιημένο)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Τα middleware επιτρέπουν τον διαχωρισμό της λογικής επεξεργασίας αιτημάτων, καθιστώντας τον κώδικα πιο αρθρωτό, επαναχρησιμοποιήσιμο και εύκολο στον έλεγχο. Ακολουθούν την αρχή της "μοναδικής ευθύνης".