Встречается на 20% собеседований по PHP

Для чего нужен middleware

Middleware (промежуточное ПО) — это слой программного обеспечения, который располагается между входящим запросом и конечным обработчиком, позволяя перехватывать, анализировать и модифицировать запросы и ответы. Он используется для решения сквозных задач, таких как аутентификация, логирование, обработка ошибок и кэширование, что делает архитектуру приложения более модульной и гибкой.

Как это работает

Middleware работает по принципу цепочки: каждый запрос проходит через набор промежуточных функций, прежде чем достигнет целевого обработчика. В PHP-фреймворках, таких как Laravel или Slim, middleware обычно реализуется в виде классов с методом handle(), который получает запрос и замыкание $next. Вызов $next($request) передаёт управление следующему middleware в цепочке. Это позволяет выполнять код до и после обработки запроса.

Пример на PHP (Slim):

php
// Middleware для логирования
class LoggerMiddleware {
    public function __invoke($request, $handler) {
        // Действие до передачи запроса дальше
        error_log('Запрос: ' . $request->getUri());
        
        // Передача запроса следующему middleware или обработчику
        $response = $handler->handle($request);
        
        // Действие после получения ответа
        error_log('Ответ: ' . $response->getStatusCode());
        return $response;
    }
}

Основные сценарии использования

  • Аутентификация и авторизация: проверка токенов, сессий, прав доступа до того, как запрос достигнет контроллера. Например, middleware может отклонять запросы без валидного JWT-токена.
  • Логирование: запись информации о каждом запросе и ответе для мониторинга и отладки.
  • Обработка ошибок: перехват исключений, возникающих в приложении, и возврат понятного клиенту ответа вместо «падения» сервера.
  • Форматирование ответов: преобразование данных в JSON, XML или другой формат, установка заголовков (например, Content-Type).
  • Кэширование: сохранение результатов обработки часто запрашиваемых данных для снижения нагрузки на сервер.
  • Обслуживание статических файлов: раздача изображений, CSS и JavaScript с управлением кэшированием.

Подводные камни

  • Порядок middleware важен: изменение последовательности может повлиять на поведение приложения. Например, middleware аутентификации должен идти до middleware, который использует данные пользователя.
  • Производительность: каждый middleware добавляет накладные расходы, поэтому не стоит злоупотреблять их количеством.
  • Сложность отладки: при большом количестве middleware сложнее проследить, где именно возникает ошибка.

Когда использовать

Middleware оправдан, когда нужно применить общую логику к множеству маршрутов или контроллеров. Он особенно полезен в крупных приложениях, где требуется разделение ответственности и переиспользование кода. Однако для простых проектов можно обойтись без него, чтобы не усложнять архитектуру.

Коротко

  • Middleware — это прослойка между запросом и обработчиком, работающая по принципу цепочки.
  • Основные задачи: аутентификация, логирование, обработка ошибок, форматирование ответов, кэширование.
  • Порядок middleware критичен, а их количество влияет на производительность.
  • Используйте middleware для сквозных задач, чтобы сделать код модульным и переиспользуемым.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы