Maelezo ya Go HTTP Middleware

Acha kunakili na kubandika kodi ileile kwenye kila handler.

Ikiwa unahitaji kukagua uthibitishaji (authentication), kurekodi muda wa ombi (request duration), au kuongeza ID ya kipekee kwenye kila ombi, usiandike mantiki hiyo ndani ya business handlers zako. Ikiwa una handler 20, utakuwa na sehemu 20 za kuhuisha (update) wakati mantiki yako ya uthibitishaji inapobadilika. Hii ni jinamizi la matengenezo (maintenance nightmare).

Middleware inatatua hili. Unaandika mantiki hiyo mara moja tu. Unazifunika (wrap) handlers zako. Na hutagusii tena.

Middleware ni nini?

Katika Go, middleware ni function ambayo: • Inapokea http.Handler. • Inarudisha http.Handler mpya. • Inatekeleza vitendo kabla au baada ya handler asilia kuendeshwa.

Ifikirie kama kitunguu. Kila tabaka linazifunika zile zinazofuata. Ombi (request) linapita kwenye kila tabaka linapoingia. Jibu (response) linapita kwenye kila tabaka linapotoka.

Utakachojifunza:

• Msingi wa interface ya http.Handler. • Jinsi ya kujenga middleware maalum (custom) kuanzia mwanzo. • Jinsi ya kuunganisha (chain) tabaka nyingi pamoja. • Jinsi ya kupitisha data kupitia mnyororo (chain) kwa kutumia context. • Vidokezo vya hali ya juu kama vile mpangilio (ordering) na panic recovery.

Mambo Muhimu ya Kuzingatia:

Mpangilio ni muhimu. Ikiwa middleware moja inaweka thamani (value) kwenye context, middleware inayofuata kwenye mnyororo lazima iwe ndiyo inayoisoma. Ukizibadilisha nafasi, data itakuwa tupu.

Daima tumia return baada ya kutoka mapema. Ukipata kosa (error) na ukatuma http.Error, itaja return mara moja. Ukita招 next.ServeHTTP baada ya kutuma kosa, seva yako itapata panic.

Tumia aina maalum (custom types) kwa ajili ya context keys. Usitumie string za kawaida kwa ajili ya keys. Hii inazuia package tofauti zisifute au kuziba data za nyingine.

Tumia wrapper ili kunasa data. Kwa kuwa http.ResponseWriter ya kawaida haikuruhusu kusoma status code baada ya kuandikwa, lazima utengeneze struct maalum ili kuipata (intercept) na kuihifadhi kwa ajili ya logs zako.

Jenga msingi imara kwa seva zako za Go HTTP kwa kufanya mazoezi ya mifumo (patterns) hii.

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