Middleware: API Güvenliği ve Loglama Katmanları Oluşturma

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18

Araya Giren Adam​

Web sunucunuza bir istek (Request) geldiğinde, bu isteğin ana fonksiyona (Handler) ulaşmadan önce bazı kontrollerden geçmesi gerekebilir.

  • "Bu kullanıcı giriş yapmış mı?" (Auth)
  • "İstek ne kadar sürdü?" (Logging)
  • "Gelen veri JSON formatında mı?" (Validation)
Bu kontrollere Middleware (Ara Katman Yazılımı) denir. Go'da middleware, bir http.Handler alıp, geriye yine bir http.Handler döndüren fonksiyondur.

Basit Bir Loglama Middleware'i Yazmak​

Standart kütüphane kullanarak bir loglama katmanı oluşturalım.

Kod:
package main

import ("fmt""log""net/http""time")

// Ana işi yapan fonksiyon (Handler)func anasayfa(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "Merhaba Gopher!")}

// Middleware Fonksiyonufunc LoggerMiddleware(next http.HandlerFunc) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {baslangic := time.Now()

    // 1. İşlemden ÖNCE yapılacaklar<br>    log.Printf("İstek Başladı: %s %s", r.Method, r.URL.Path)<br><br>    // 2. İsteği asıl fonksiyona (next) ilet<br>    next(w, r)<br><br>    // 3. İşlemden SONRA yapılacaklar<br>    sure := time.Since(baslangic)<br>    log.Printf("İstek Bitti. Süre: %s", sure)<br>}<br>
}

func main() {// Handler'ı Middleware ile sarmalıyoruzhttp.HandleFunc("/", LoggerMiddleware(anasayfa))

log.Println("Sunucu 8080 portunda...")<br>http.ListenAndServe(":8080", nil)<br>
}

Sonuç​

Middleware yapısı, kod tekrarını önler. Güvenlik kontrollerini (Auth) tek bir yerde yazıp tüm rotalara uygulayabilirsiniz. Framework'lerde (Gin, Fiber) router.Use(Middleware) şeklinde çok daha kolay kullanılır.
 
Geri
Üst