Go HTTP Middleware की व्याख्या

हर एक handler में एक ही कोड को बार-बार कॉपी और पेस्ट करना बंद करें।

यदि आपको authentication चेक करने, request duration को log करने, या हर request में एक unique ID जोड़ने की आवश्यकता है, तो उस logic को अपने business handlers के अंदर न लिखें। यदि आपके पास 20 handlers हैं, तो auth logic बदलने पर आपको 20 अलग-अलग जगहों पर अपडेट करना होगा। यह मेंटेनेंस के लिए एक बुरा सपना (nightmare) साबित हो सकता है।

Middleware इस समस्या का समाधान करता है। आप logic को केवल एक बार लिखते हैं। आप अपने handlers को wrap करते हैं। और फिर आपको इसे दोबारा छूने की ज़रूरत नहीं पड़ती।

Middleware क्या है?

Go में, middleware एक ऐसा function है जो: • एक http.Handler को स्वीकार करता है। • एक नया http.Handler return करता है। • original handler के चलने से पहले या बाद में actions परफॉर्म करता है।

इसे एक प्याज (onion) की तरह समझें। प्रत्येक layer अगली layer को wrap करती है। request अंदर जाते समय प्रत्येक layer से होकर गुजरती है। response बाहर आते समय प्रत्येक layer से होकर गुजरता है।

आप क्या सीखेंगे:

• http.Handler interface की बुनियादी समझ। • शुरुआत से (from scratch) custom middleware कैसे बनाएं। • कई layers को एक साथ chain कैसे करें। • context का उपयोग करके chain के माध्यम से data कैसे पास करें। • ordering और panic recovery जैसे advanced tips।

मुख्य बातें (Key Takeaways):

• Order मायने रखता है। यदि एक middleware context में कोई value सेट करता है, तो chain में अगला middleware उसे पढ़ने वाला होना चाहिए। यदि आप उन्हें बदल देते हैं, तो data खाली होगा।

• Early exit के बाद हमेशा return करें। यदि आपको कोई error मिलता है और आप http.Error भेजते हैं, तो तुरंत return कॉल करें। यदि आप error भेजने के बाद next.ServeHTTP कॉल करते हैं, तो आपका server panic कर जाएगा।

• context keys के लिए custom types का उपयोग करें। keys के लिए plain strings का उपयोग न करें। यह अलग-अलग packages को एक-दूसरे के data को overwrite करने से रोकता है।

• Data capture करने के लिए एक wrapper का उपयोग करें। चूंकि standard http.ResponseWriter आपको status code लिखे जाने के बाद उसे पढ़ने की अनुमति नहीं देता है, इसलिए आपको उसे intercept करने और अपने logs के लिए save करने के लिए एक custom struct बनाना होगा।

इन patterns में महारत हासिल करके अपने Go HTTP servers के लिए एक मजबूत आधार तैयार करें।

Source: https://dev.to/ferztyle/go-http-middleware-explained-what-it-is-how-it-works-and-how-to-build-your-own-1ma7