الوسيط
Middleware
مفهوم
~20 دقيقة
الوسيط — Middleware
الوسيط (Middleware) هو نمط يسمح لك بتنفيذ كود قبل وبعد المعالج الفعلي — مثل التسجيل، المصادقة، ضغط البيانات، وغيرها. في Go، الوسيط هو ببساطة دالة تأخذ http.Handler وتُرجع http.Handler.
مفهوم الوسيط
الفكرة بسيطة: كل طلب يمر عبر سلسلة من الدوال قبل أن يصل للمعالج النهائي:
الطلب → [تسجيل] → [مصادقة] → [CORS] → المعالج → الاستجابة
كتابة وسيط بسيط
main.go
Output:
وسيط المصادقة — Authentication Middleware
main.go
Output:
وسيط CORS
main.go
Output:
سلسلة الوسيط — Middleware Chaining
بدلاً من التداخل العميق، يمكنك إنشاء دالة مساعدة:
main.go
Output:
وسيط استرداد panic — Recovery Middleware
func recoveryMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Printf("panic: %v", err)
http.Error(w, "خطأ داخلي", 500)
}
}()
next.ServeHTTP(w, r)
})
}
هذا الوسيط يمنع انهيار الخادم الكامل عند حدوث panic في أي معالج.
نصائح عملية
- رتّب الوسيط بعناية — التسجيل أولاً، ثم CORS، ثم المصادقة
- استخدم defer للتنظيف في الوسيط
- لا تنسَ
returnبعد كتابة استجابة خطأ - الوسيط يجب أن يكون خفيفاً — لا تضع منطق أعمال فيه
تحدي — Challenge
محاكاة سلسلة وسيط تُسجّل وتفحص المصادقة