Middleware kavramı
- Go kursu
- İleri seviye
- Ders 31/68
- 4 dk
Middleware kavramını ve katmanlı yapısını öğrenirsin.
Middleware kavramı
Middleware, bir HTTP isteği asıl işleyiciye ulaşmadan önce ve sonra çalışan ara katmandır. Kayıt tutma, kimlik doğrulama, sıkıştırma, zaman ölçme gibi her rotada tekrar edecek işleri tek yerde toplar.
istek → [log] → [auth] → işleyici
yanıt ← [log] ← [auth] ← işleyiciGo'da middleware basitçe bir http.Handler alıp yeni bir http.Handler döndüren fonksiyondur.
Neden middleware?
Her işleyicinin başına aynı log ve yetki kodunu kopyalamak hem tekrar hem de unutulma riski demektir. Middleware ile bu kod bir kez yazılır ve istediğin rotalara uygulanır. Ayrıca işleyiciler yalnızca kendi işlerine odaklanır; test etmeleri kolaylaşır.
Uygulama İlk middleware
func etiket(next http.Handler) http.Handler yaz: yanıta X-Ders: go başlığını ekleyip next.ServeHTTP(w, r) çağırsın. httptest ile test et ve başlığı yazdır.
Başlangıç kodu
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func etiket(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Ders", "go")
next.ServeHTTP(w, r)
})
}
func main() {
h := etiket(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}))
rec := httptest.NewRecorder()
h.ServeHTTP(rec, httptest.NewRequest("GET", "/", nil))
fmt.Println(rec.Header().Get("X-Ders"))
}Beklenen çıktı
go
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Go'da tipik middleware imzası hangisidir?
- func(http.ResponseWriter)
- func() error
- func(*http.Request) bool
- func(http.Handler) http.Handler Doğru cevap
Açıklama: Middleware bir işleyiciyi sarar: işleyiciyi alır, çevresine iş ekleyen yeni bir işleyici döndürür.
2 Sarılan tür
func logla(next http.____) http.Handler {
func logla(next http.Handler) http.Handler {
Açıklama: Middleware bir http.Handler alır ve yine http.Handler döndürür.
3 Middleware kullanımı
| Kavram | Anlamı |
|---|---|
Log |
İsteği kaydeder |
Auth |
Yetkiyi denetler |
Recover |
Panic'i yakalar |
Gzip |
Yanıtı sıkıştırır |