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
- context.Context Neden Var?
- WithCancel ve WithTimeout
- WithDeadline ve WithValue
- HTTP ve Veritabanı Çağrılarında Bağlam