Bạn có bao giờ thắc mắc “thứ gì” hay “cái gì” nằm giữa request và response hay không? Hay bạn có bao giờ đặt câu hỏi rằng có cơ chế nào kiểm tra các request HTTP trước chúng gửi vào ứng dụng của bạn? Nếu bạn đang thắc mắc, Middleware chính là câu trả lời bạn đang tìm kiếm. Vậy, Middleware là gì? Khi nào sử dụng Middleware nhé!
Tìm hiểu về Middleware
Middleware là gì?
Định nghĩa này khá dễ hiểu vì “cái tên nói lên tất cả”: Middleware tạm dịch là phần mềm trung gian, là một phần mềm trung gian giữa 2 phần mềm/ dịch vụ/ ứng dụng để chúng có thể giao tiếp với nhau một cách dễ dàng hơn.
Nếu bạn thường xuyên làm việc với các Proxy, bạn cũng có thể xem Middleware như những hoạt động biên dịch, accumulator dữ liệu hoặc là một cổng Proxy chuyển tiếp request vẫn ổn.
Middleware có những lợi ích gì?
Trong phần định nghĩa, công việc của Middleware có vẻ khá đơn giản. Nhưng lợi ích mà Middleware mang lại thực sự rất lớn và tạo ra những tác động tích lên ứng dụng của bạn như:
- Thu hẹp khoảng cách giữa ứng dụng và cơ sở hạ tầng phần cứng, cũng như các phần mềm cấp thấp. Từ đó, việc điều phối các phần của ứng dụng trở nên thuận lợi hơn, đồng thời đơn giản hoá các công việc tích hợp phần mềm
- Hỗ trợ các nhà phát triển tốt hơn trong việc tránh gặp rắc rối do sử dụng các nền tảng cũ, cấp thấp quá sơ sài, những nền tảng này thường sẽ tạo ra rất nhiều lỗi.
- Cung cấp các báo cáo, tóm tắt để nhà phát triển có thể sửa lỗi, gia tăng bảo mật, lưu trữ phiên bản và nâng cấp phần mềm để người dùng có trải nghiệm tốt nhất
- Middleware giúp đơn giản hoá các nhu cầu phát triển đa nền tảng, hệ thống phân tán và nhúng trở nên đơn giản hơn.
Vì sao nên sử dụng Middleware?
Những công nghệ hỗ trợ giao tiếp đa nền tảng hay nhu cầu phát triển 1 ứng dụng nhưng có thể giao tiếp trên nhiều nền tảng đang trở nên ngày một cao.
Song song đó, rất nhiều nhà phát triển xây dựng ứng dụng/ phần mềm và cung cấp sản phẩm của họ để người dùng, nhà phát triển khác có thể “nhúng” vào trong sản phẩm dịch vụ của họ trở nên phổ biến hơn.
Vì thế, vai trò cầu nối tương tác giữa người dùng với hệ thống, vai trò trung gian giữa request và response cùng như xử lý các loại logic của Middleware trở nên vô cùng hữu dụng và cần thiết.
Ứng dụng của Middleware trong thực tế
“Người phiên dịch” – Translator
Trong thực tế, có rất nhiều dạng data-interchange như JSON, XML hay Protobuf. Tuy nhiên, trong thời điểm hiện tại JSON là là dạng được sử dụng dùng nhiều nhất và trong hầu hết các trường hợp.
Ví dụ, chúng ta có 2 dịch vụ cần giao tiếp với nhau, chúng ta có thể tạo ra một Middleware sử dụng các thư viện chuyển đổi dữ liệu, dịch dữ liệu sang định dạng mà dịch vụ còn lại có thể hiểu được.
Tích luỹ – nhân bản dữ liệu
Microservice là một dạng kiến trúc đang rất phổ biến trong các phần mềm hiện đại, có tính phức tạp cao.
Nếu bạn chưa biết về Microservice, bạn có thể hiểu đơn giản Microservice là một phần mềm/ ứng dụng được tạo nên từ rất nhiều ứng dụng, module dịch vụ nhỏ được phát triển tách biệt với nhau và sử dụng các phương pháp giao tiếp với nhau để tạo thành một ứng dụng lớn.
Ví dụ, bạn phát triển một dự án phần mềm thương mại điện tử, để các nguồn thông tin được phân bổ riêng biệt nhằm để có thể phân tích và nghiên cứu hành vi của khách hàng. Bạn có thể sử dụng các Microservice riêng biệt cho lưu trữ, truy xuất dữ liệu và một Microservice khác để xác thực, lưu trữ các thông tin về người dùng.
Chúng ta sẽ có 2 trường hợp để xử lý vấn đề này bao gồm:
- Accumulating Data
- Duplicating Data
Accumulating Data
Bạn sử dụng một Middleware để gửi thông tin đến cả 2 server và yêu cầu chúng tìm kiếm thông tin trong cơ sở dữ liệu sản phẩm và cơ sở dữ liệu người dùng. Sau đó, tìm ra sản phẩm phù hợp với yêu cầu của người dùng và trả kết quả về cho người dùng.
Trong trường hợp này, nếu bạn có nhiều server, Microservice khác nhau, lượng dữ liệu sẽ tăng tuyến tính theo số lượng server, Microservice bạn có. Đồng nghĩa với việc thời gian xử lý sẽ lâu hơn.
Duplicating Data
Đối với phương pháp này, bạn sẽ lưu trữ dữ liệu tại cơ sở dữ liệu người dùng, cơ sở dữ liệu sản phẩm và thêm 1 cơ sở dữ liệu thứ 3 chứa cả 2 dữ liệu trên.
Điều này sẽ giúp người dùng có thể tìm kiếm dữ liệu trực tiếp và nhanh chóng hơn bao giờ hết. Tuy nhiên, giải pháp này rất hao tổn bộ nhớ nếu bạn có nhiều cơ sở dữ liệu khác nhau.
Như trong ảnh dưới đây, bạn sẽ thấy Middleware như sau dùng để phân bổ lưu trữ dữ liệu một cách hiệu quả hơn:
Bảo mật API
Trong bất cứ front end nào của client đều cung có thể nhìn thấy các request được gửi đi trong bảng điều khiển của trình duyệt hoặc Proxy. Vì thế, khi người dùng đăng nhập, đăng ký, đăng xuất các địa chỉ xác thực trên server sẽ bị lộ.
Nếu bạn đã học về những kiến thức về địa chỉ IP backend, bạn có thể sử dụng các công cụ để tấn công vào server.
Vì thế, chúng ta sẽ sử dụng Middleware như một cánh cổng Proxy nhằm để ẩn URL xác thực của server. Lúc này, Middleware sẽ là “người” giao tiếp với người dùng và truyền yêu cầu của họ đến máy chủ xác thực sau đó gửi lại phản hồi cho người dùng.
Bằng cách này, chúng ta có thể chặn gần như toàn bộ request đến server xác thực trừ những request của Middleware. Điều này sẽ khiến server xác thực của chúng ta trở nên an toàn hơn.
Hiển thị API công khai
Trong phần trước, chúng ta đã biết rằng Middleware có thể sử dụng để hạn chế truy cập vào các API của chúng ta.
Nhưng hiện tại bạn lại muốn chia sẻ, cấp quyền truy cập một cách hạn chế vào API thì sao?
Ví dụ, chúng ta là một nhóm kỹ sư phần mềm trong ngân hàng và ngân hàng đang lên kế hoạch để tổ chức một cuộc thi Hackathon? Trong trường hợp này, chúng ta sẽ phải cấp quyền truy cập API.
Vì chúng ta là ngân hàng, nên, chúng ta không chia sẻ toàn bộ quyền truy cập vào các API do chúng liên quan trực tiếp đến dữ liệu người dùng và tài sản của họ. Vậy giải pháp là chúng ta sẽ cần phải chia sẻ API một cách có chọn lọc.
Trong trường hợp này, chúng ta có thể triển khai một Middleware chỉ hiển thị một số endpoint và chuyển hướng yêu cầu đến các API được cấp. Sau đó, chúng ta sẽ thực hiện cung cấp các API này đến các nhà phát triển tham gia vào Hackathon.
Sau quá trình tìm hiểu về Middleware là gì cũng như ứng dụng của Middleware trong thực tế ra sao, bạn cũng đã nắm rất nhiều kiến thức bổ ích rồi đúng không? Tino Group hi vọng rằng những kiến thức này có thể trở thành hành trang trong việc phát triển sự nghiệp lập trình của bạn. Cuối cùng, Tino Group chúc bạn luôn thành công trên con đường lập trình web đã chọn!
Bài viết có tham khảo nội dung từ nhiều nguồn: FreeCodeCamp, TopDev, Redhat, IBM,…
Những câu hỏi thường gặp về Middleware
Middleware trong Laravel là gì?
Middleware trong Laravel có chức năng tương tự với cơ chế cho phép người dùng có thể tham gia vào các luồng xử lý request trong ứng dụng được dựng bằng Laravel.
Cách tạo Middleware trong Laravel ra sao?
Để tạo một Middleware trong Laravel, bạn sử dụng cú pháp như sau:
- php artisan make:Middleware [MiddlewareName]
Các loại Middleware trong ExpressJS là gì?
Trong ExpressJS, có 5 loại Middleware bao gồm:
- Application-level Middleware
- Router-level Middleware
- Error-handling Middleware
- Built-in Middleware
- Third-party Middleware
Nên dùng phiên bản ExpressJS nào để làm việc với Middleware?
Tốt nhất, bạn nên sử dụng ExpressJS phiên bản 4.x trở lên. Vì từ phiên bản này, ExpressJS không còn phụ thuộc vào thư viện Connect nữa, hầu hết các hàm Middleware đều được tách thành những module riêng biệt khiến việc lập trình với ExpressJS trở nên thuận lợi hơn.
Hiện tại, chỉ còn duy nhất Middleware express.static vẫn chưa được tách ra thành module riêng biệt.