Middleware
Middleware di Gin menyediakan cara untuk memproses permintaan HTTP sebelum mencapai handler rute. Fungsi middleware memiliki signature yang sama dengan handler rute — gin.HandlerFunc — dan biasanya memanggil c.Next() untuk meneruskan kontrol ke handler berikutnya dalam rantai.
Cara kerja middleware
Section titled “Cara kerja middleware”Gin menggunakan model onion untuk eksekusi middleware. Setiap middleware berjalan dalam dua fase:
- Pre-handler — kode sebelum
c.Next()berjalan sebelum handler rute. - Post-handler — kode setelah
c.Next()berjalan setelah handler rute selesai.
Ini berarti middleware membungkus handler seperti lapisan bawang. Middleware pertama yang dipasang adalah lapisan terluar.
func Logger() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now()
// Pre-handler phase c.Next()
// Post-handler phase latency := time.Since(start) log.Printf("Request took %v", latency) }}Memasang middleware
Section titled “Memasang middleware”Ada tiga cara untuk memasang middleware di Gin:
// 1. Global -- applies to all routesrouter := gin.New()router.Use(Logger(), Recovery())
// 2. Group -- applies to all routes in the groupv1 := router.Group("/v1")v1.Use(AuthRequired()){ v1.GET("/users", listUsers)}
// 3. Per-route -- applies to a single routerouter.GET("/benchmark", BenchmarkMiddleware(), benchHandler)Middleware yang dipasang pada cakupan yang lebih luas berjalan terlebih dahulu. Dalam contoh di atas, permintaan ke GET /v1/users akan mengeksekusi Logger lalu Recovery lalu AuthRequired lalu listUsers.
Dalam bagian ini
Section titled “Dalam bagian ini”- Menggunakan middleware — Memasang middleware secara global, ke grup, atau rute individual
- Middleware kustom — Menulis fungsi middleware Anda sendiri
- Menggunakan middleware BasicAuth — Autentikasi HTTP Basic
- Goroutine di dalam middleware — Menjalankan tugas latar belakang dengan aman dari middleware
- Konfigurasi HTTP kustom — Penanganan error dan recovery dalam middleware
- Header keamanan — Mengatur header keamanan umum