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
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
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
- 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