0Pricing
Go Academy · Ders

HTTP ve Veritabanı Çağrılarında Bağlam

Bağlamı çağrı zinciri boyunca yayma

HTTP ve Veritabanı Çağrılarında Bağlam, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. 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.

Bağlam kullanan HTTP istemcisi

req.WithContext(ctx) kullanarak giden bir HTTP isteğine bağlam aktarın. Yanıt gelmeden önce bağlam iptal edilirse istek de iptal edilir.

req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
    if errors.Is(err, context.DeadlineExceeded) {
        // timeout
    }
}

http.NewRequestWithContext

Bir istek oluşturup ardından WithContext çağırmak yerine http.NewRequestWithContext (Go 1.13 ve sonrası) kullanmayı tercih edin; bu yaklaşım daha temizdir ve aradaki bir bellek ayırma işlemini önler.

Bir HTTP isteğini iptal etme

WithCancel ile iptal edilebilir bir bağlam oluşturun, bunu isteğe aktarın ve işlem tamamlandığında veya bir hata oluştuğunda iptal işlevini çağırın. İstemci TCP bağlantısını sonlandırır.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)

database/sql ile bağlam kullanımı

Tüm database/sql yöntemlerinin *Context varyantları vardır: QueryContext, ExecContext ve PrepareContext. Bağlam tamamlandığında bunlar sorguyu iptal eder.

rows, err := db.QueryContext(ctx, "SELECT id FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()

Sorgudan önce bağlamı denetleme

Uzun sürecek bir sorguyu başlatmadan önce bağlamı denetleyin; istek zaten iptal edilmişse işlemi hemen kısa devre yaparak sonlandırın.

if err := ctx.Err(); err != nil {
    return err // context already done
}
rows, err := db.QueryContext(ctx, ...)

Bağlam ve bağlantı havuzu

Bir sorgu sırasında bağlam iptal edildiğinde, sürücü destekliyorsa database/sql bağlantıyı hatalı olarak işaretler. Böylece bozulmuş bir bağlantının havuza geri dönmesi önlenir.

gRPC ve bağlam

gRPC, son tarih aktarımı için bağlamı kullanır. İstemci bağlam için bir son tarih belirler; sunucu bunu her akış alımında denetler. Üst veriler de bağlam üzerinden aktarılır.

resp, err := client.GetUser(ctx, &pb.GetUserRequest{Id: id})

Gelen istek bağlamı

HTTP sunucusu, r.Context() aracılığıyla gelen her isteğe bir bağlam ekler. İstemci bağlantıyı kestiğinde bu bağlam iptal edilir.

func handler(w http.ResponseWriter, r *http.Request) {
    ctx := r.Context()
    result, err := db.QueryContext(ctx, query)
}

Ara katman yazılımı zincirlerinde bağlam

Ara katman yazılımı, istek bağlamını son tarihler, kimlik doğrulama verileri veya izleme kimlikleriyle zenginleştirir ve zenginleştirilmiş isteği sonraki işleyiciye aktarır.

Bağlamı hizmet çağrıları üzerinden aktarma

Mikro hizmet mimarisinde, gelen istek bağlamındaki izleme kimliği tüm giden HTTP ve RPC üst bilgilerine eklenmelidir; böylece dağıtık izleme uçtan uca çalışır.

Bağlam ile sınama

Sınamalarda, sınama durumları arasında eş yordamların sızmasını önlemek için context.Background() veya context.WithTimeout kullanın.

Hızlı kontrol

Eklenmiş bir bağlama sahip HTTP isteğini hangi işlev oluşturur?

Özet: HTTP ve veritabanında bağlam

Temel noktalar:

  • Giden HTTP çağrıları için http.NewRequestWithContext kullanın
  • database/sql *Context yöntemleri, bağlam tamamlandığında sorguları iptal eder
  • Gelen isteklerde r.Context() kullanılır; istemci bağlantıyı kestiğinde iptal edilir
  • Bağlamı (ve izleme kimliğini) tüm alt hizmet çağrıları üzerinden aktarın

Sıkça Sorulan Sorular

“HTTP ve Veritabanı Çağrılarında Bağlam” dersi ücretsiz mi?

Evet — “HTTP ve Veritabanı Çağrılarında Bağlam” 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 ve Veritabanı Çağrılarında Bağlam” dersinde ne öğreneceğim?

Bağlamı çağrı zinciri boyunca yayma 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 4. dersidir.

“HTTP ve Veritabanı Çağrılarında Bağlam” 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. context.Context Neden Var?
  2. WithCancel ve WithTimeout
  3. WithDeadline ve WithValue
  4. HTTP ve Veritabanı Çağrılarında Bağlam
← Go Academy Sayfasına Dön