Middleware trong các Web Framework hiện đại

19:02 24/04/2025

Middleware là một lớp phần mềm trung gian hoạt động giữa request của client và response từ server. Nó đóng vai trò như một “người trung gian” trong luồng xử lý HTTP, cho phép kiểm tra, lọc, biến đổi và xử lý các request trước khi chúng đến controller hoặc hành động cuối cùng, cũng như xử lý response trước khi gửi trở lại client.

Về mặt kỹ thuật, middleware tạo thành một chuỗi các hàm xử lý, mỗi hàm có thể:

  • Thực thi mã nguồn
  • Thay đổi request và response
  • Kết thúc chu trình request-response
  • Gọi middleware tiếp theo trong chuỗi

Tại sao middleware là thiết yếu trong các framework hiện đại?

  • Nguyên tắc đơn trách nhiệm (Single Responsibility Principle)

Middleware cho phép tách các chức năng thành các thành phần độc lập, mỗi thành phần chỉ chịu trách nhiệm cho một nhiệm vụ cụ thể, phù hợp với nguyên tắc thiết kế phần mềm.

  • Khả năng tái sử dụng cao

Các chức năng phổ biến như xác thực, phân quyền, ghi log có thể được viết một lần và tái sử dụng trên nhiều route hoặc thậm chí nhiều ứng dụng khác nhau.

  • Kiến trúc phân lớp rõ ràng

Middleware tạo nên các lớp xử lý rõ ràng, giúp tổ chức mã nguồn theo một cách có cấu trúc và dễ hiểu.

  • Mở rộng linh hoạt

Có thể dễ dàng thêm chức năng mới vào ứng dụng mà không cần sửa đổi mã nguồn hiện có, chỉ cần thêm middleware mới vào chuỗi xử lý.

  • Xử lý cross-cutting concerns

Middleware giải quyết hiệu quả các vấn đề cắt ngang (cross-cutting concerns) như bảo mật, ghi log, xử lý ngoại lệ – những vấn đề ảnh hưởng đến nhiều phần của ứng dụng.

Middleware trong các Framework phổ biến

ExpressJS (Node.js)

ExpressJS sử dụng middleware như một khái niệm cốt lõi. Mỗi middleware là một hàm nhận ba tham số:

  • req: Đối tượng request
  • res: Đối tượng response
  • next: Callback để chuyển điều khiển đến middleware tiếp theo

// Middleware ghi log thời gian request

const timeLogger = (req, res, next) => {

    console.log(`Request received at: ${new Date().toISOString()}`);

    next();

  };

  // Middleware xác thực

  const authenticate = (req, res, next) => {

    const token = req.headers.authorization;

    if (!token) {

      return res.status(401).json({ message: ‘Authentication required’ });

    }

    // Xác thực token…

    req.user = decodedUser; // Gắn thông tin user vào request

    next();

  };

  

  // Sử dụng middleware toàn cục

  app.use(timeLogger);

  

  // Sử dụng middleware cho route cụ thể

  app.get(‘/protected’, authenticate, (req, res) => {

    res.json({ message: `Hello ${req.user.name}` });

  });

Laravel (PHP)

Laravel cung cấp hai loại middleware chính:

  • Global middleware: áp dụng cho mọi HTTP request
  • Route middleware: áp dụng cho các route cụ thể

// Middleware xác thực trong Laravel

namespace App\Http\Middleware;

use Closure;

use Illuminate\Http\Request;

class AuthenticateUser

{

    public function handle(Request $request, Closure $next)

    {

        if (!auth()->check()) {

            return redirect()->route(‘login’);

        }

        return $next($request);

    }

}

// Đăng ký trong Kernel.php

protected $routeMiddleware = [

    ‘auth’ => \App\Http\Middleware\AuthenticateUser::class,

];

// Sử dụng trong route

Route::get(‘/dashboard’, function () {

    // Dashboard logic

})->middleware(‘auth’);

Các trường hợp sử dụng phổ biến của middleware

Xác thực và phân quyền

Kiểm tra người dùng đã đăng nhập hay chưa, xác thực token, và kiểm tra quyền truy cập trước khi cho phép tiếp cận tài nguyên.

Xử lý CORS (Cross-Origin Resource Sharing)

Quản lý các yêu cầu từ các nguồn khác domain và đảm bảo chính sách bảo mật được thực thi.

Ghi log và theo dõi

Ghi lại thông tin về các request như thời gian, IP, endpoint được truy cập để phân tích hoặc debug.

Xử lý lỗi

Bắt các exception và chuyển đổi thành response có cấu trúc phù hợp cho client.

Nén và tối ưu hóa

Nén dữ liệu trước khi gửi về client để giảm băng thông và cải thiện tốc độ.

Caching

Lưu trữ tạm thời kết quả để tăng hiệu suất và giảm tải cho server.

Rate limiting

Giới hạn số lượng request trong một khoảng thời gian nhất định để ngăn chặn lạm dụng API.

Chuyển đổi và xử lý dữ liệu

Chuyển đổi format dữ liệu (như JSON, XML) hoặc xử lý dữ liệu đầu vào.

Kết luận

Middleware là một khái niệm thiết yếu trong các web framework hiện đại, cung cấp cách tiếp cận có cấu trúc để xử lý luồng request-response. Dù mỗi framework có cách triển khai khác nhau, nhưng ý tưởng cốt lõi vẫn là tạo ra các lớp xử lý chức năng độc lập, có thể tái sử dụng và mở rộng.

Việc hiểu và sử dụng hiệu quả middleware không chỉ giúp tổ chức mã nguồn tốt hơn mà còn mang lại lợi ích lớn về khả năng bảo trì, mở rộng và hiệu suất của ứng dụng web. Middleware là minh chứng cho nguyên tắc “chia để trị” trong phát triển phần mềm – chia nhỏ các vấn đề phức tạp thành các thành phần đơn giản, dễ quản lý.

Giảng viên Nguyễn Lê Phương
Bộ môn Công nghệ thông tin
FPT Polytechnic TP HCM

Hỗ trợ tư vấn và giải đáp thông tin tuyển sinh FPT Polytechnic

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2026

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.