Yavaşlamalar ve Hata Kodları Ekleme - C# Kursunda Örnek API Oluşturma
Modern uygulamalar oluştururken ve test ederken, özellikle web ön yüzleri olanlarda, geliştiriciler genellikle API gecikmeleri ve beklenmeyen hata yanıtları gibi gerçek dünya senaryolarını simüle etme ihtiyacıyla karşı karşıya kalır. Buna destek olarak, Tim Corey, "Yavaşlamalar ve Hata Kodları Ekleme - C# Dersindeki Örnek Bir API Oluşturma" başlıklı dersinde son derece pratik bir yürüyüş sunar. Bu videoda, Tim bir minimal C# API'yi yapay gecikmeler ve özel hata yanıtlarıyla zenginleştirmeyi açıklıyor - test sırasında ideal olmayan durumları simüle etme araçları.
Bu makalede, Tim'in videoda gösterdiği kavramlar ve uygulamalar üzerinde adım adım yürüyeceğiz.
Örnek API'ye ve Amacına Giriş
Tim, dersi bir örnek API'ye sahip olmanın web geliştirmeyi öğrenirken değerini tekrar ederek başlar. Böyle bir API, ön yüz uygulamaları için somut bir test olanağı sunar.
Kursun sonunda, Tim sağlam bir API oluşturmayı hedefler:
Örnek veri
Dokümantasyon
Sağlık kontrolleri
Simüle edilmiş yavaşlamalar
Simüle edilmiş hatalar
- Docker ve VPS aracılığıyla dağıtım seçenekleri
Bu özel derste, Tim zorlu koşullar altında gerçekçi bir API davranışı için yavaşlamaları simüle etmeye ve hata kodlarını üretmeye odaklanır.
API Uç Noktalarına Yapay Gecikmeler Ekleme
Tim, özellikle kurs verileriyle ilgili olan belirli API uç noktalarına isteğe bağlı bir gecikme parametresi ekleyerek başlar. Amacı, daha iyi ön yüz testi için yavaş API yanıtlarını simüle etmektir.
Uygulama Detayları:
Gecikme parametresi milisaniyeleri temsil eden null-olabilir bir tam sayıdır.
Bunu yönetmek için, zamanla birlikte dönen Task
yerine sadece IResult döndüren eşzamansız (async) yöntemlere geçiş yapar. - Eğer bir gecikme sağlanırsa ve kabul edilebilir sınırlar içindeyse (300.000 milisaniye veya 5 dakikayı aşmıyorsa), yöntem Task.Delay() ile yürütmeyi duraklatır.
2:33'te, Tim gecikmeyi sınırlandırmanın önemini vurguluyor. Uygulamanın yanıt veremez hale gelmesini veya bozuk görünmesini önlemek için bekleme süresini 5 dakikayla sınırlar.
if (delay > 300000)
{
delay = 300000;
}
await Task.Delay(delay.Value);if (delay > 300000)
{
delay = 300000;
}
await Task.Delay(delay.Value);Bu ekleme, geliştiricilerin istemci uygulamasında zaman aşımı ve yanıt verme sürelerini test etmek için beş dakikaya kadar gecikmeleri simüle edebilmelerini sağlıyor.
Gecikme Mekanizmasını Test Etme
Tim, gecikme mantığını doğrulamak için Postman (veya bir Postman klonu) kullanarak birkaç test gerçekleştirir. Örneğin:
delay=5000 (5 saniye) API'nin sonuçları döndürmeden önce duraklamasına neden olur.
- delay=500 daha kısa bir duraklama sağlar.
Gerçek gecikmenin, işlem yükünden dolayı belirtilen değerden her zaman biraz daha uzun olduğunu gözlemler — bu, gerçek dünya için önemli bir nüanstır. Tim'in 5:09'da belirttiği gibi, API'yi milisaniyeye kadar süre ölçmüyorsunuz, bir eşik simülasyonu yapıyorsunuz.
Gecikme Fonksiyonalitesini Daha Fazla Uç Noktaya Genişletme
Tim yalnızca 'tüm dersleri yükle' uç noktasıyla yetinmez. Tutarlılık sağlamak istediği için, aynı gecikme kapasitesini 'ID ile dersi yükle' uç noktasında da uygular.
6:15'te, eşzamansız hale dönüştürülürken yöntemin adına otomatik olarak 'Async' eklenmesi nedeniyle bir adlandırma çatışması ile karşılaşır. Tim, açıklık ve tutarlılık için her iki yöntemin adlarını da 'Async' adlandırma kuralıyla uyumlu olacak şekilde ayarlar.
Uygulama testleri doğrular:
Gecikmelere uyuluyor.
Mevcut olmayan kayıtlar, gecikmeden sonra beklenildiği gibi 404 döner.
- Gecikmenin kaldırılması veya boş değerlerin geçirilmesi uygun şekilde davranır, Tim, Postman'daki bir kullanıcı arayüzü hatasına dikkat çeker ancak bunun API ile ilgili bir sorun olmadığını belirtir (8:00).
Özel Hata Yanıtları Ekleme
Sonraki adım olarak, Tim API testleri için değerli bir araç tanıtır: çeşitli HTTP hata kodlarını simüle edebilen özel bir uç nokta.
9:13'te, bazı uç noktaların (örneğin, ID ile bir ders döndüren) kayıp veri için 404 döndürürken doğal olduğunu açıklar, ancak başka hata kodları test etmek için yerleşik bir yöntem yoktur — açıkça simüle edilmedikçe.
Tim /error/{code} adresinde yeni bir uç nokta oluşturur:
Bir tamsayı HTTP durum kodu kabul eder.
- Karşılık gelen HTTP hata yanıtını bir switch ifadesi kullanarak döndürür.
code switch
{
400 => Results.BadRequest(),
401 => Results.Unauthorized(),
403 => Results.Forbid(),
404 => Results.NotFound(),
_ => Results.StatusCode(code)
};code switch
{
400 => Results.BadRequest(),
401 => Results.Unauthorized(),
403 => Results.Forbid(),
404 => Results.NotFound(),
_ => Results.StatusCode(code)
};Bu, hem yaygın istemci tarafından meydana getirilen hataları hem de geliştiricinin test etmek isteyebileceği herhangi bir özel kodu kapsar.
12:03'te, bu yeni uç noktayı app.AddErrorEndpoints() ile programa ekler ve hata sınıfını statik olarak işaretler.
Hata Uç Noktasını Test Etme
Tim şimdi hata uç noktasını çeşitli durum kodlarını geçirerek test eder:
400 'Hatalı İstek' döner
401 'Yetkisiz' döner
404 'Bulunamadı' döner
301 'Kalıcı Olarak Taşındı' döner
- 405 'İzin Verilmeyen Yöntem' döner
Bu, sadece hata kodları için değil, herhangi bir HTTP durum kodu için uç noktanın esnekliğini gösterir. 13:04'te, Tim bu yöntemin ön uç uygulamaların farklı sunucu yanıtlarını nasıl ele aldığını test etmek için ideal olduğunu doğrular.
Adını /httpcode olarak da düşünmüş olsa da, basitlik açısından /error ile devam eder, çünkü esas olarak hata koşullarını simüle etmek için kullanılır.
Fonksiyonel İyileştirmelerin Özeti
Tim, videoyu şu API'de yapılan geliştirmeleri özetleyerek tamamlar:
Yavaşlamalar API yanıtlarında gerçek dünya gecikmesini simüle eder.
Hata simülasyonu hemen hemen her HTTP yanıtına karşı test yapabilmek için esneklik sağlar.
- Bu özellikler, örnek API'yi daha sağlam hâle getiriyor ve gerçekçi test senaryoları için paha biçilmez kılıyor.
14:16'da, Tim uygulamanızın gecikmiş yanıtlar veya çeşitli sunucu hataları gibi farklı API durumlarında nasıl davrandığını test etmenin önemini vurguluyor.
Sonraki Adım: API'yi Dockerize Etmek
Bu videoda ayrıntılı olarak ele alınmamakla birlikte, Tim bir sonraki adımı belirtir: API'yi Dockerize etmek. Bu, geliştiricilerin farklı ortamlarda dağıtımı ve paylaşımı daha kolay hale getiren, kendine ait bir Docker konteynerında örnek API'yi yerel olarak çalıştırmalarını sağlar.
Son Düşünceler
Tim videoyu, geliştiricilerin gerçekten test etmeleri gereken gerçekçi özellikleri içeren kapsamlı bir örnek API oluşturma taahhüdünü yineleyerek sonlandırıyor. Bunlar arasında şunlar yer alır:
Gecikmeler
Hatalar
Sağlık kontrolleri
- Kimlik doğrulama ve gelişmiş uç noktalar için gelecekteki planlar
Hedef basit ama güçlü — geliştiricilere gerçek API'lerin tuhaflıklarını yansıtacak bir araç sağlamak, böylece uygulamaları sağlam, güvenilir ve kullanıcı dostu olur.
Sonuç
Bu dersin sonunda, izleyiciler API'lerinde yapay gecikmeler ve hata yanıtları eklemenin neden ve nasılını daha iyi anlama ile donanmış olurlar. Tim Corey'nin yaklaşımı metodik, pratik ve doğrudan gerçek dünya uygulama test ihtiyaçlarına bağlıdır. API test oyununuzu geliştirmek istiyorsanız, bu ders takip etmek için mükemmel bir kaynaktır — ve şimdi nerede arama yapacağınızı tam olarak biliyorsunuz.
Uygulamalı rehberlik için Tim Corey'nin tam video dersini izleyin.

