Sağlık Kontrolleri Ekleme - C# Kursunda Örnek Bir API Oluşturma
[[academy-video-youtube({"vid": "95Unq3X39yg", "start_time": "0", "title": "Sağlık Kontrolleri Ekleme - C# Kursu İçinde Örnek Bir API Oluşturma", "creator": "Tim Corey", "length": "23m 30s"})]]
ASP.NET Core kullanarak C#'ta RESTful API'leri geliştirmek ve test etmek, modern bir arka uç geliştiricisi için pratik bir yetenektir. Tim Corey, "Sağlık Kontrolleri Ekleme - C# Kursu İçinde Örnek Bir API Oluşturma" başlıklı öğretici videosunda, sağlık kontrolleri entegre edilmiş örnek bir API oluşturma sürecini anlatıyor. Bu makale, tamamen Tim'in transkriptine dayanarak, public async Task, int id, var app ve diğer HTTP istek yöntemleri gibi önemli noktaları kapsayan adım adım süreci açıklıyor.
Visual Studio Code kullanarak, Tim Corey'nin bir C# API projesinde sağlık kontrollerini nasıl ayarladığını daha derinlemesine inceleyelim.
Örnek API ve Sağlık Kontrollerine Giriş
Tim, bir örnek API'nin web geliştirmeyi öğrenirken güçlü bir araç olduğunu açıklar. Geliştiricilerin GET, POST, PUT ve DELETE yöntemlerini kullanarak API çağrılarını simüle etmelerine olanak tanır, uygun istek verileri ve durum kodları ile. Tim'in inşa ettiği API destekler:
Veri modeli ile örnek veriler
API istekleri için RESTful davranışlar
JSON formatında yanıtlar
Sağlık kontrolleri
- Docker kapları ve web uygulamaları olarak dağıtım
Sağlık Kontrolleri Paketi Yükleme
Tim, projeyi Visual Studio Code'da açar ve Bağımlılıklar üzerinde sağ tıklayarak NuGet paketlerini yönetir. AspNetCore.HealthChecks.UI.Client paketini arar ve yükler. Bu, uygulamanın iki tür sağlık kontrolünü desteklemesini sağlar.
Sağlık Kontrol Sınıfları Oluşturma
Tim, API proje klasörü içinde Sağlık Kontrolleri adlı yeni bir klasör ekler. Burada IHealthCheck arayüzünü (interface) implement eden, her biri farklı bir durumu temsil eden çeşitli sınıflar oluşturur: sağlıklı, bozulmuş, sağlıksız ve rastgele.
HealthyHealthCheck.cs
Bu sınıf bir public async Task<HealthCheckResult> implementasyonu kullanarak bir HealthCheckResult.Healthy döndürür:
return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));Bu, kararlı bir hizmeti nasıl ele alacağını test etmek için yararlı olan sağlıklı bir durumu simüle eder.
DegradedHealthCheck.cs
return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));Bu kontrol, bozulmuş hizmet yanıtı döndürür. Kısmi başarısızlığı veya performans sorunlarını simüle etmenin basit bir yoludur.
UnhealthyHealthCheck.cs
return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));Bu, başarısız bir hizmeti taklit eder, 500 HTTP durum kodu bekleyeceğiniz veya NotFound() döndüreceğiniz durumları simüle eder.
RandomHealthCheck.cs
Bu sağlık kontrolü, rastgele bir tam sayı kullanarak üç durumdan birini simüle eder
int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};Tim, değişken koşullar altında nasıl davranış testi yapıldığını vurgular.
StartUp Yapılandırmasına Sağlık Kontrollerini Kaydetme
Tim, Startup veya yapılandırma klasöründe yeni bir statik sınıf HealthChecksConfig.cs ekler. Bu klas iç합니다:
AddAllHealthChecks()
services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });Bu, ASP.NET Core hizmetler kabında dependency injection için tüm sağlık kontrollerini kaydeder.
MapAllHealthChecks()
app.MapHealthChecks("/health");app.MapHealthChecks("/health");Bu, tüm hizmetleri bir arada değerlendiren tek bir /health uç noktası oluşturur. Eğer herhangi biri sağlıksızsa, tüm kontrol sağlıksız olarak döner.
Özel Sağlık Uç Noktaları Oluşturma
Bireysel bileşenleri test etmek için Tim her sağlık kontrolünü etiketle haritalar:
app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});/health/degraded, /health/unhealthy ve /health/random için de aynı işlemi tekrarlar. Her biri, geliştiricilerin belirli davranışları ve ön uçların onlara nasıl tepki verdiğini test etmelerine olanak tanır.
/health/random adresini ziyaret ederken, çıktı rastgele sonuca göre "sağlıklı", "azalmış" ve "sağlıksız" arasında değişir.
Sağlık Kontrolleri için UI Desteği Ekleme
Tim, her sağlık kontrol rotası için bir UI yanıtı sağlayarak uç noktaları geliştirir. Bu, bir JSON çıktısı sağlar:
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});Bu, süre, etiketler ve durum gibi verilerle her sağlık kontrolünü incelemeye olanak tanır. Tim daha sonra her sağlık uç noktası için UI sürümleri oluşturur:
/healthui/healthy
/healthui/degraded
/healthui/unhealthy
- /healthui/random
Her biri, özellikle RESTful API'ler ve mobil cihazlardan veya web sayfalarından test etmek için ideal olan ayrıntılı bir JSON formatıyla yanıt verir.
API Projesini Tamamlama
Tim, bu özelliklere rağmen Program.cs'nin yalnızca 21 satır olduğunu vurgular. Bunu şunlara bağlar:
İyi proje klasör yapısı
Modelleri Modeller klasöründe tutma
Uç noktaları ve denetleyicileri kendi klasörlerinde yerleştirme
- Her sağlık kontrolü sınıfı için async Task yöntemlerini kullanma
Ayrıca, bu örnek API'nin gecikme süresi veya hataları, dağıtımdan önce simüle etmek için, üretim ortamlarında ne kadar yararlı olduğunu vurgular.
"Bu API ile daha fazla test yapabiliriz, sadece GET çağrıları yapmakla kalmaz," diyor Tim.
Sonraki Adımlar
Tim, bir sonraki derste, API davranışını daha da test etmek için yavaşlamalar (örneğin, 5 saniyelik gecikmeler) ve NotFound() ya da BadRequest() döndüren hatalar ekleyeceğini söyler.
Sonuç
Bu videoda, Tim Corey, ASP.NET Core kullanarak entegre sağlık kontrolleri olan minimal bir API oluşturma sürecini metodik olarak yürütür. Ana bileşenler şunlardır:
Sağlık kontrol sınıfları (Healthy, Degraded, Unhealthy, Random)
AddHealthChecks() aracılığıyla bağımlılık enjeksiyonu
MapHealthChecks() kullanarak uç noktaları haritalama
- Yapılandırılmış JSON yanıtlarını destekleme
Bu yaklaşım, REST API'lerini doğrulamayı, hataları simüle etmeyi ve hem geliştirme hem de üretim ortamları için web uygulamalarını güçlendirmeyi kolaylaştırır.

