本文是我對中介軟體的收集整理及個人理解的記錄。僅代表個人水平、個人理解。如有問題,師請雅正。
維基百科:
中介軟體(英語:Middleware),是提供系統軟體和應用軟體之間連線的軟體,以便於軟體各部件之間的溝通,特別是應用軟體對於系統軟體的集中的邏輯,在現代資訊科技應用框架如Web服務、面向服務的體系結構等中應用比較廣泛。如資料庫、Apache的Tomcat,IBM公司的WebSphere,BEA公司的WebLogic應用伺服器,東方通公司的Tong系列中介軟體,以及Kingdee公司的等都屬於中介軟體。
好吧,作為一個前端渣渣,看不懂。再看看百度百科吧,下面是一些相關中介軟體:
- 企業服務匯流排(ESB : Enterprise Service Bus):ESB 是一種開放的、基於標準的分散式同步或非同步資訊傳遞中介軟體。通過 XML、Web Service介面以及標準化基於規則的路由選擇文件等支援,ESB 為企業應用程式提供安全互用性。
- 事務處理(TP:Transaction Processing)監控器:為發生在物件間的事務處理提供監控功能,以確保操作成功實現。
- 分散式計算環境(DCE:Distributed Computing Environment):指建立執行在不同平臺上的分散式應用程式所需的一組技術服務。
- 遠端過程呼叫(RPC:Remote Procedure Call):指客戶機向伺服器傳送關於執行某程式的請求時所需的標準。
- 物件請求代理(ORB:Object Request Broker):為使用者提供與其他分散式網路環境中物件通訊的介面。
- 資料庫訪問中介軟體(Database Access Middleware):支援使用者訪問各種作業系統或應用程式中的資料庫。SQL 是該類中介軟體的其中一種。
- 資訊傳遞(Message Passing):電子郵件系統是該類中介軟體的其中一種。
- 基於XML的中介軟體(XML-Based Middleware):XML 允許開發人員為實現在Internet中交換結構化資訊而建立文件。
OK,到這裡,還是一臉懵逼。。。別灰心,因為術業有專攻,中介軟體是一個比較寬泛的概念,我們縮小一下範圍,瞭解一下web相關的中介軟體,簡單點:
- 將具體業務和底層邏輯解耦的元件。
- 資料從底層到應用端的中轉站。
Node中介軟體
說了這麼多,好像並沒有什麼實質性的內容,都是一些抽象的概念,來點實際的,瞭解一下Node中介軟體。 近幾年來,在企業開發中越來越推崇微服務架構,而它在不經意間卻導致前端同學和後端同學之間關於 API 介面顆粒度的爭吵,越來越多見:
- 「你自己請求 2 個介面再組裝不就行了?」 - 後端同學追求服務下沉和解耦。
- 「少一次 HTTP 啊,加一個介面有那麼難麼?」 - 前端同學離使用者最近,需要考慮使用者體驗靈活性。
歸結為一個問題:『服務端設計的介面究竟是面向 UI 還是隻是通用服務?』
BFF 的提出
2015 年,Sam Newman 對此提出了 Pattern: Backends For Frontends,簡稱 BFF,國內也俗稱為粘合層。
可以看出,這一層一直都存在,只不過是由後端同學維護而已。 但我們知道,前端貼近使用者側,需求的變化太快了,後端同學來維護會很累。 在 BFF 理念中,最重要的一點是:服務自治,誰使用誰開發,即它應該由前端同學去維護。
- 服務自治減少了溝通成本,帶來了靈活和高效。
- 自己吃自己的狗糧。
- BFF 並不限制具體技術,團隊根據自己的技術棧來選型: Java/Node/PHP/Python/Ruby...
- 基於 GraphQL 技術的通用中間層閘道器,也是剛剛出現一種很不錯的方案。
- 在大部分前端團隊中,都會傾向於選擇生態更優,語法更熟悉的 Node.js 。
為什麼是Node?
無它,就是需要這樣的一箇中間層,但後端同學不太想管了(也管不過來),所以大部分前端同學選擇了一個更順手的 Node.js ,僅此而已。
那麼,上Node?
不,你需要根據你的業務場景,還有團隊的技術架構,來具體情況具體分析。切記, BFF 不限制具體技術選型。 BFF 不可避免的會帶來:研發成本一定程度上的增加,對開發者的能力要求增加。
Express中介軟體
Express和Koa是目前最主流的基於node的web開發框架,他們的開發者是同一班人馬。貌似現在Koa更加流行,但是仍然有大量的專案在使用Express,所以這裡我們說說Express中介軟體的原理。以下所說中介軟體皆為Express中介軟體。
中介軟體的功能和分類
中介軟體的本質就是一個函式,在收到請求和返回相應的過程中做一些我們想做的事情。Express文件中對它的作用是這麼描述的:
執行任何程式碼。 修改請求和響應物件。 終結請求-響應迴圈。 呼叫堆疊中的下一個中介軟體。
Express文件中把他們分為了五類,但是他們的原理相同,只是用法不同:
應用級中介軟體 路由級中介軟體 錯誤處理中介軟體 內建中介軟體 第三方中介軟體
用法
非常簡單。
var express = require('express')
var app = express();
app.use('/user', function (req, res, next) {
//TODO
next();
});
app.listen(8080)
複製程式碼
總結: 面向前端的Node中介軟體並不能提高我們的應用效能,而是規範我們的開發流程,提高我們的工作效率,遇到問題能夠更快的解決,至於是否使用,就要因地制宜了。