Go Academy · पाठ

मिडलवेयर प्रतिरूप

लॉगिंग और प्रमाणीकरण के लिए हैंडलर श्रृंखलाबद्ध करना

पाठ 3, कुल 4 में से13 चरण

मिडलवेयर प्रतिरूप, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

मिडलवेयर क्या है?

मिडलवेयर एक ऐसा फ़ंक्शन है जो हैंडलर के व्यावसायिक लॉजिक में बदलाव किए बिना साझा व्यवहार (लॉगिंग, प्रमाणीकरण, पुनर्प्राप्ति) जोड़ने के लिए http.Handler को लपेटता है।

मिडलवेयर सिग्नेचर

मिडलवेयर ऐसा फ़ंक्शन है जो http.Handler लेता है और http.Handler लौटाता है:

type Middleware func(http.Handler) http.Handler

सरल लॉगिंग मिडलवेयर

हैंडलर के चलने से पहले और बाद में प्रत्येक अनुरोध का लॉग दर्ज करें:

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("done %s", r.URL.Path)
    })
}

मिडलवेयर की शृंखला बनाना

कई मिडलवेयर परतों को नेस्ट करके लागू करें:

handler := Logger(Auth(RateLimit(myHandler)))
http.ListenAndServe(":8080", handler)

मिडलवेयर शृंखला सहायक

गहरे नेस्टिंग के बिना मिडलवेयर को क्रम से लागू करने के लिए एक शृंखला फ़ंक्शन बनाएँ:

func Chain(h http.Handler, m ...Middleware) http.Handler {
    for i := len(m)-1; i >= 0; i-- {
        h = m[i](h)
    }
    return h
}
// Usage: Chain(myHandler, Logger, Auth, RateLimit)

प्रमाणीकरण मिडलवेयर

अगले हैंडलर को कॉल करने से पहले प्रमाणीकरण जाँचें। टोकन न होने या अमान्य होने पर तुरंत 401 लौटाएँ।

func Auth(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        token := r.Header.Get("Authorization")
        if !isValid(token) {
            http.Error(w, "Unauthorized", http.StatusUnauthorized)
            return
        }
        next.ServeHTTP(w, r)
    })
}

पैनिक पुनर्प्राप्ति मिडलवेयर

हैंडलर से आने वाले पैनिक को पकड़ें, ताकि सर्वर क्रैश न हो:

func Recovery(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, "Internal Server Error", 500)
            }
        }()
        next.ServeHTTP(w, r)
    })
}

कॉन्टेक्स्ट के माध्यम से डेटा भेजना

मिडलवेयर बाद के हैंडलर के लिए अनुरोध कॉन्टेक्स्ट में डेटा जोड़ सकता है:

ctx := context.WithValue(r.Context(), userKey, user)
next.ServeHTTP(w, r.WithContext(ctx))

प्रतिक्रिया रैपर

ResponseWriter को लपेटकर हैंडलर द्वारा लिखे गए स्थिति कोड को कैप्चर करें:

type statusRecorder struct {
    http.ResponseWriter
    status int
}
func (r *statusRecorder) WriteHeader(code int) {
    r.status = code
    r.ResponseWriter.WriteHeader(code)
}

क्रम महत्वपूर्ण है

मिडलवेयर उसी क्रम में चलता है जिस क्रम में वह हैंडलर को लपेटता है। दर सीमित करने से पहले प्रमाणीकरण चलना चाहिए; पैनिक पुनर्प्राप्ति सबसे बाहरी होनी चाहिए, ताकि वह अन्य मिडलवेयर के पैनिक पकड़ सके।

प्रति-मार्ग बनाम वैश्विक मिडलवेयर

पूरे mux पर वैश्विक मिडलवेयर (लॉगिंग, पुनर्प्राप्ति) लागू करें। उप-राउटर या हैंडलर रैपर का उपयोग करके किसी विशेष मार्ग समूह पर मार्ग-विशिष्ट मिडलवेयर (प्रमाणीकरण, दर सीमा) लागू करें।

त्वरित जाँच

Go में HTTP मिडलवेयर का सही सिग्नेचर क्या है?

पुनरावलोकन: मिडलवेयर पैटर्न

मुख्य बिंदु:

  • मिडलवेयर: func(http.Handler) http.Handler
  • नेस्ट करके शृंखला बनाएँ; स्पष्टता के लिए Chain सहायक का उपयोग करें
  • पुनर्प्राप्ति सबसे बाहरी; व्यावसायिक लॉजिक से पहले प्रमाणीकरण
  • कॉन्टेक्स्ट के माध्यम से डेटा आगे भेजें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “मिडलवेयर प्रतिरूप” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “मिडलवेयर प्रतिरूप” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“मिडलवेयर प्रतिरूप” में मैं क्या सीखूँगा?

लॉगिंग और प्रमाणीकरण के लिए हैंडलर श्रृंखलाबद्ध करना आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“मिडलवेयर प्रतिरूप” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. HTTP सर्वर बनाना
  2. रूटिंग और पथ पैरामीटर
  3. मिडलवेयर प्रतिरूप
  4. शालीनतापूर्ण शटडाउन
← Go Academy पर वापस जाएँ