AzLearn

الوسيط

Middleware

مفهوم ~20 دقيقة

الوسيط — Middleware

الوسيط (Middleware) هو نمط يسمح لك بتنفيذ كود قبل وبعد المعالج الفعلي — مثل التسجيل، المصادقة، ضغط البيانات، وغيرها. في Go، الوسيط هو ببساطة دالة تأخذ http.Handler وتُرجع http.Handler.

مفهوم الوسيط

الفكرة بسيطة: كل طلب يمر عبر سلسلة من الدوال قبل أن يصل للمعالج النهائي:

الطلب → [تسجيل] → [مصادقة] → [CORS] → المعالج → الاستجابة

كتابة وسيط بسيط

main.go

وسيط المصادقة — Authentication Middleware

main.go

وسيط CORS

main.go

سلسلة الوسيط — Middleware Chaining

بدلاً من التداخل العميق، يمكنك إنشاء دالة مساعدة:

main.go

وسيط استرداد 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 في أي معالج.

نصائح عملية

  1. رتّب الوسيط بعناية — التسجيل أولاً، ثم CORS، ثم المصادقة
  2. استخدم defer للتنظيف في الوسيط
  3. لا تنسَ return بعد كتابة استجابة خطأ
  4. الوسيط يجب أن يكون خفيفاً — لا تضع منطق أعمال فيه
تحدي — Challenge