أساسيات سلسلة Middleware لـ HTTP
تغليف http.Handler وتسلسله باستخدام next
أساسيات سلسلة Middleware لـ HTTP درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
البرمجية الوسيطة في net/http
في مكتبة Go القياسية، البرمجية الوسيطة هي دالة تقبل http.Handler وتعيد http.Handler جديدًا يغلّف المعالج الأصلي بسلوك إضافي.
type Middleware func(http.Handler) http.Handlerالبرمجية الوسيطة الأساسية
تغلّف HandlerFunc الداخلية المعالج الأصلي بمنطق يُنفّذ قبل المعالجة وبعدها:
func Logger(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("→ %s %s", r.Method, r.URL.Path)
next.ServeHTTP(w, r)
log.Printf("← %s %s done", r.Method, r.URL.Path)
})
}تطبيق البرمجية الوسيطة
غلّف المعالجات قبل تسجيلها في mux:
mux := http.NewServeMux()
mux.Handle("/api/", Logger(Auth(apiHandler)))
http.ListenAndServe(":8080", mux)مساعد سلسلة البرمجيات الوسيطة
تطبّق دالة السلسلة عدة برمجيات وسيطة بترتيب واضح من اليسار إلى اليمين:
func Chain(h http.Handler, ms ...func(http.Handler) http.Handler) http.Handler {
for i := len(ms)-1; i >= 0; i-- { h = ms[i](h) }
return h
}
// Usage: Chain(handler, Logger, Auth, RateLimit)السياق في البرمجية الوسيطة
أرفق القيم الخاصة بالطلب من خلال إنشاء سياق مشتق وتغليف الطلب:
func RequestID(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
id := uuid.New().String()
ctx := context.WithValue(r.Context(), reqIDKey, id)
w.Header().Set("X-Request-ID", id)
next.ServeHTTP(w, r.WithContext(ctx))
})
}غلاف كاتب الاستجابة
التقط رمز الحالة الذي يكتبه المعالج من خلال تغليف ResponseWriter:
type captureWriter struct {
http.ResponseWriter
status int
}
func (cw *captureWriter) WriteHeader(code int) {
cw.status = code
cw.ResponseWriter.WriteHeader(code)
}برمجية وسيطة لاسترداد حالات panic
استرد من حالات panic لمنع تعطل الخادم:
func Recovery(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if rec := recover(); rec != nil {
http.Error(w, "Internal Server Error", 500)
}
}()
next.ServeHTTP(w, r)
})
}الترتيب مهم
تُنفّذ البرمجية الوسيطة بالترتيب الذي تغلّف به المعالج. ينبغي أن تكون Recovery الخارجية (تغلّف كل شيء). ويجب تنفيذ Auth قبل منطق الأعمال. أما Logging فعادةً ما تكون خارجية بعد Recovery.
التوافق مع الموجّهات التابعة لجهات خارجية
لأن البرمجية الوسيطة تتبع التوقيع القياسي func(http.Handler) http.Handler، فهي متوافقة مع chi وgorilla/mux وأي موجّه يقبل http.Handler.
عالمية أم خاصة بالمسار
طبّق البرمجية الوسيطة عالميًا على mux بأكمله، أو غلّف معالجات فردية لسلوك خاص بمسار معين. وتجعل الموجّهات الفرعية في chi البرمجيات الوسيطة على مستوى المجموعة أكثر سهولة.
اختبار البرمجيات الوسيطة
استخدم httptest.NewRecorder وhttptest.NewRequest لاختبار البرمجية الوسيطة بمعزل عن غيرها، من دون بدء خادم فعلي.
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
Logger(http.HandlerFunc(noop)).ServeHTTP(w, r)تحقق سريع
ما التوقيع القياسي للبرمجية الوسيطة في net/http؟
خلاصة: سلسلة البرمجيات الوسيطة
النقاط الأساسية:
- func(http.Handler) http.Handler هو التوقيع القياسي
- استخدم مساعد Chain لتجنب التداخل العميق
- استخدم r.WithContext(ctx) لإرفاق القيم، والتقط الكاتب لتسجيل الحالة
- اجعل Recovery خارجية، وAuth قبل منطق الأعمال، وLogging بعد Recovery
تعلم Go مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «أساسيات سلسلة Middleware لـ HTTP» مجاني؟
نعم — نص درس «أساسيات سلسلة Middleware لـ HTTP» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات سلسلة Middleware لـ HTTP»؟
تغليف http.Handler وتسلسله باستخدام next تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات سلسلة Middleware لـ HTTP»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات سلسلة Middleware لـ HTTP
- Middleware التسجيل ومعرّف الطلب
- Middleware المصادقة وتحديد معدل الطلبات
- Middleware لـ CORS واستعادة ما بعد panic