什麼是中間件?
### 快速鏈接
⭐中間件意味著很多事情
⭐中間件如何運作?
⭐不同類型的中間件
⭐在軟體開發中使用中介軟體
⭐為什麼中間件有用?
要點
中間件透過提供結構良好的通訊協定來充當連接各種應用程式的促進者,從而提高開發效率,同時促進無縫互連。
中間件有助於快速實施調整,同時也提供工作環境中使用者友善的資源。
中間件作為模組化的一個實例,提供了從進階到低階應用程式的各個層級的程式設計優勢。
在各種情況下,人們可能會遇到個人使用的「中間件」一詞,並發現自己對他們所提到的特定技術或流程感到好奇。此術語涵蓋了各種可用於促進不同軟體系統之間通訊的工具和流程。
中介軟體意味著很多事情
中間件雖然根據上下文包含各種定義,但最一般的解釋可以被理解為「在其他軟體系統中進行中間操作的軟體應用程式」。這種特徵表明中間件透過依賴外部程式碼來提供輸入和處理輸出來發揮作用。
某些類型的中間件是綜合應用程序,能夠透過採用已建立的通訊標準和資料架構來跨各種狀態轉換訊息,從而促進與其他軟體組件的無縫整合。另一方面,某些中間件本質上非常簡約,採用直接插入特定框架制定的工作流程的單獨功能或模組的形式。
中間件受益於模組化原則,該原則涉及將複雜的流程劃分為更簡單的組件以增強管理。
中間件如何運作?
中間件透過遵守既定協議和明確定義的公共互動來獲得效力。嚴格的通訊指導方針使開發人員能夠開發符合行業標準的軟體,從而確保最佳效能。
Web 應用程式伺服器可作為網站使用者介面與應用程式及其關聯資料庫提供的後端邏輯和資料結構之間的中介。由於它與與之互動的系統分離,從理論上講,可以用類似的替代方案替換應用程式伺服器,而無需更改底層程式碼庫或重新配置資料庫模式。
中間件元件經常利用 JSON、REST、XML 和 SOAP 等技術。這些都是已建立的、廣泛使用的並且本質上是基於文字的,有利於單個組件的無縫替換或修改。此外,它們基於文字的結構和廣泛的開發工具可以實現簡化且可靠的錯誤檢測和解決。
不同類型的中介軟體
由於其廣泛性,中間件涵蓋了廣泛的實例和應用程式。這種多樣性的一些說明性例子包括:
進程間通訊可以透過訊息代理來建構。
⭐網路應用程式伺服器和網路框架。
遊戲引擎提供了標準功能的基礎,可以在其上建構、修改或完全丟棄。這些基本元素允許創建和開發遊戲世界,而無需從頭開始建立一切。透過利用這些預先建立的機制,開發人員可以有更多的時間和資源專注於在遊戲中打造獨特的體驗,而不是專注於渲染圖形或管理使用者輸入等基本功能。
⭐事件流平台,如 Apache Kafka。
在軟體開發中使用中介軟體
中間件透過為 Web 框架的建置提供基礎,在 Web 開發中發揮務實的作用。通常,這些框架提供預先配置的環境,可根據特定需求進行客製化。本質上,這需要透過標準化和使用者定義函數的預定序列來處理傳入的 HTTP 請求,最終產生適當的 HTTP 回應。
Express.js 框架利用這個概念來促進個人化配置。考慮用 JavaScript 寫的中間函數的實例:
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
此函數非常簡單:
該應用程式旨在處理遵循特定模式的 URL 路徑,以“/user/”開頭,隨後是標識符。
系統捕獲有關所使用的請求方法的性質的信息,包括 GET 或 POST 等選項。
應用程式透過在目前批次的中間件操作完成之後呼叫指定的功能來繼續,以便繼續執行中間功能的序列。
在中間操作序列中最後呼叫「next()」是整個過程中的基本元素,強調了此方法的適應性。只要各個中間件組件能夠自主運行,就可以輕鬆替換或重新排列它們的順序,從而在塑造整個鏈的行為方面提供相當大的靈活性。
Laravel 是一種流行的 PHP Web 開發框架,廣泛利用中間件來處理 HTTP 請求和回應。其關鍵功能之一是靈活的中間件系統,允許開發人員根據特定要求定義自訂行為。事實上,Laravel 中間件設定中使用的命名約定與框架內其他類別的命名約定非常相似,命名空間明確指示其作為「中間件」的用途。這種設計選擇促進了使用 Laravel 的開發人員的一致性和易用性,最終透過其強大的中間件架構簡化了實現複雜應用程式邏輯的過程。
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureTokenIsValid
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}
return $next($request);
}
}
這個精確模組的指定目標非常專業;它本質上會仔細檢查請求以確保它包含預定的令牌。因此,中間功能能夠透過繞過後續操作來中止進一步的處理,並且取代其啟動重定向。此過程涉及產生適當的回應對象,中間件元件必須傳回該對象,以履行其在合約協議中概述的承諾。
Django 是一個廣泛使用的基於 Python 的 Web 開發平台,透過將此類元件指定為「插件」來舉例說明其對中間件的處理。類似的術語包括“鉤子”和“回調”,所有這些都有助於 Django 中間件結構內在的整體適應性。本質上,這種配置在系統組織的工作流程中提供了額外的多功能性實例。
def simple_middleware(get_response):
# One-time configuration and initialization.
def middleware(request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
return middleware
您可以利用陣列配置來操縱所選中間件的執行順序。這樣可以輕鬆管理和選擇將按特定順序執行的所需中間件。
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
Django 透過其 CommonMiddleware 類別提供了一個預先定義的實現,這對許多應用程式都是有利的。該框架透過過濾掉有問題的使用者代理程式來防止未經授權的訪問,同時也處理 URL 標準化。關鍵的、面向安全的中間件的放置可以根據個人需求而有所不同,從而允許在處理管道中進行定制的排序。
為什麼中間件有用?
中間件促進了原本不打算整合的軟體系統之間的互通性,提供了一種透過結構良好且健壯的協定在它們之間整合和通訊的方法。
使用中間件的優點是多方面的,包括:
應用程式的開發流程得到了簡化,從而縮短了產品上市的時間。
⭐高效的連接。
⭐更快的變化過渡。
⭐易於使用的工作場所工具。
中間件代表了模組化的體現,而這項原則在不同層級的程式設計範式(從宏觀架構到微觀實作細節)中都具有優點。