Go Academy · Ders

HTTP Ara Katman Zincirinin Temelleri

http.Handler'ı sarmalama ve next ile zincirleme

1. ders / 413 adım

HTTP Ara Katman Zincirinin Temelleri, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

net/http içinde ara yazılım

Go'nun standart kitaplığında ara yazılım, bir http.Handler kabul eden ve özgün işleyicinin çevresine ek davranış saran yeni bir http.Handler döndüren işlevdir.

type Middleware func(http.Handler) http.Handler

Temel ara yazılım

İçteki HandlerFunc, özgün işleyiciyi işlem öncesi ve sonrası mantıkla sarar:

func Logger(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf("→ %s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
        log.Printf("← %s %s done", r.Method, r.URL.Path)
    })
}

Ara yazılımı uygulama

İşleyicileri çoklayıcıya kaydetmeden önce sarın:

mux := http.NewServeMux()
mux.Handle("/api/", Logger(Auth(apiHandler)))
http.ListenAndServe(":8080", mux)

Ara yazılım zinciri yardımcısı

Bir zincir işlevi, birden çok ara yazılımı okunabilir ve soldan sağa bir sırayla uygular:

func Chain(h http.Handler, ms ...func(http.Handler) http.Handler) http.Handler {
    for i := len(ms)-1; i >= 0; i-- { h = ms[i](h) }
    return h
}
// Usage: Chain(handler, Logger, Auth, RateLimit)

Ara yazılımda Context

Türetilmiş bir bağlam oluşturarak ve isteği bununla sararak istek kapsamındaki değerleri ekleyin:

func RequestID(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        id := uuid.New().String()
        ctx := context.WithValue(r.Context(), reqIDKey, id)
        w.Header().Set("X-Request-ID", id)
        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

Yanıt yazıcısı sarmalayıcısı

Bir işleyici tarafından yazılan durum kodunu ResponseWriter'ı sararak yakalayın:

type captureWriter struct {
    http.ResponseWriter
    status int
}
func (cw *captureWriter) WriteHeader(code int) {
    cw.status = code
    cw.ResponseWriter.WriteHeader(code)
}

Panik kurtarma ara yazılımı

Sunucunun çökmesini önlemek için paniklerden kurtulun:

func Recovery(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if rec := recover(); rec != nil {
                http.Error(w, "Internal Server Error", 500)
            }
        }()
        next.ServeHTTP(w, r)
    })
}

Sıra önemlidir

Ara yazılım, işleyiciyi sardığı sırada çalışır. Recovery en dışta olmalıdır (her şeyi sarmalıdır). Kimlik doğrulama, iş mantığından önce gelmelidir. Günlükleme genellikle Recovery'den sonra en dışta yer alır.

Üçüncü taraf yönlendiricilerle uyumluluk

Ara yazılım standart func(http.Handler) http.Handler imzasını izlediği için chi, gorilla/mux ve http.Handler kabul eden tüm yönlendiricilerle uyumludur.

Genel ve rotaya özgü kullanım

Ara yazılımı tüm çoklayıcıya genel olarak uygulayın veya rotaya özgü davranış için tek tek işleyicileri sarın. chi'nin alt yönlendiricileri, grup düzeyindeki ara yazılımı daha temiz hâle getirir.

Ara yazılımı sınama

Gerçek bir sunucu başlatmadan ara yazılımı yalıtılmış olarak sınamak için httptest.NewRecorder ve httptest.NewRequest kullanın.

w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/", nil)
Logger(http.HandlerFunc(noop)).ServeHTTP(w, r)

Hızlı Kontrol

Standart net/http ara yazılım imzası nedir?

Özet: Ara Yazılım Zinciri

Temel noktalar:

  • func(http.Handler) http.Handler standart imzadır
  • Derin iç içe geçmelerden kaçınmak için Chain yardımcısını kullanın
  • Değer eklemek için r.WithContext(ctx); durumu kaydetmek için yakalayıcı yazıcı
  • Recovery en dışta; kimlik doğrulama iş mantığından önce; günlükleme Recovery'den sonra
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“HTTP Ara Katman Zincirinin Temelleri” dersi ücretsiz mi?

Evet — “HTTP Ara Katman Zincirinin Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“HTTP Ara Katman Zincirinin Temelleri” dersinde ne öğreneceğim?

http.Handler'ı sarmalama ve next ile zincirleme Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“HTTP Ara Katman Zincirinin Temelleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. HTTP Ara Katman Zincirinin Temelleri
  2. Günlükleme ve İstek Kimliği Ara Katmanı
  3. Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı
  4. CORS ve Panic Kurtarma Ara Katmanı
← Go Academy Sayfasına Dön