پیادهسازی Middleware در Go
Middleware یک بخش حیاتی در توسعه اپلیکیشنهای وب است که به شما اجازه میدهد تا منطق قابل استفاده مجدد بین دریافت درخواستها و ارسال پاسخها قرار دهید. در زبان Go، پیادهسازی Middleware بسیار ساده و انعطافپذیر است.
Middleware چیست؟
Middleware به طور کلی به تابعی گفته میشود که قبل یا بعد از اجرای یک Handler اصلی اجرا شده و قابلیتهایی مانند احراز هویت، لاگگیری، فشردهسازی، یا تغییر درخواست/پاسخ را ارائه میدهد.
ساختار Middleware در Go
در Go، Middleware معمولاً یک تابع است که یک http.Handler
را گرفته و http.Handler
دیگری بازمیگرداند. این ساختار امکان زنجیرهای کردن چندین Middleware را فراهم میکند.
package main
import (
"fmt"
"net/http"
)
// Middleware function
def loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Printf("Request received: %s\n", r.URL.Path)
next.ServeHTTP(w, r)
})
}
func mainHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", mainHandler)
http.ListenAndServe(":8080", loggingMiddleware(mux))
}
مثال: ترکیب چندین Middleware
برای ترکیب چندین Middleware، کافی است هر کدام از آنها را به دیگری زنجیر کنید:
func authMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("Authorization") == "" {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
next.ServeHTTP(w, r)
})
}
mux := http.NewServeMux()
mux.HandleFunc("/", mainHandler)
middlewareChain := loggingMiddleware(authMiddleware(mux))
http.ListenAndServe(":8080", middlewareChain)
نتیجهگیری
استفاده از Middleware در Go یکی از بهترین راهها برای مدیریت درخواستها و پاسخهای HTTP به صورت سازمانیافته و قابل توسعه است. با استفاده از مثالهای فوق، میتوانید سیستم خود را توسعه داده و قابلیتهای بیشتری اضافه کنید.