Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Performans, optimizasyon ve seriyi kapatış: Buradan sonra nereye?
Seriyi kapatıyoruz: performansın temel ilkeleri, en sık karşılaşılan darboğazlar (N+1 sorgusu gibi), ölçmeden optimize etmemek, öğrendiklerimizin toparlanması ve buradan sonra nereye gidileceği.
Health check ve monitoring: API'nin ayakta ve sağlıklı olduğunu izlemek
Health check ve monitoring'i işliyoruz: uygulamanın canlıda sağlıklı olup olmadığını otomatik kontrol etmek, veritabanı gibi bağımlılıkları izlemek, liveness/readiness ayrımı ve monitoring'in temel fikri.
Caching: in-memory ve Redis ile distributed cache
Caching'i işliyoruz: sık istenen ama nadiren değişen veriyi geçici saklayarak performansı artırmak, in-memory cache ile Redis tabanlı distributed cache arasındaki fark ve cache'in en zor problemi olan tutarlılık.
Integration test: WebApplicationFactory ile API'yi uçtan uca test etmek
Integration test'i işliyoruz: unit test'ten farkı, parçalar bir araya gelince test etmek ne demek, WebApplicationFactory ile gerçek bir istek uçtan uca akıtmak ve test için ayrı bir veritabanı kullanmak.
Unit test: xUnit ve Moq ile kodun parçalarını izole test etmek
Unit test'i işliyoruz: bir birimi izole test etmek ne demek, neden test yazarız, xUnit ile test yapısı, Moq ile bağımlılıkları taklit etmek ve iyi test yazmanın temel ilkeleri.
Swagger/OpenAPI ile dokümantasyon ve Scalar: API'ni kendi kendini anlatır hale getir
API dokümantasyonunu işliyoruz: OpenAPI nedir, neden otomatik dokümantasyon önemli, .NET 9'da OpenAPI desteği, Swagger UI ve modern bir alternatif olan Scalar ile interaktif dokümantasyon kurmak.
CORS, rate limiting ve güvenlik başlıkları: API'yi dış tehditlere karşı sağlamlaştırmak
API'yi kötüye kullanıma karşı sağlamlaştıran üç konuyu işliyoruz: CORS ile hangi sitelerin erişebileceğini kontrol etmek, rate limiting ile isteği sınırlamak ve güvenlik başlıklarıyla temel korumayı eklemek.
JWT ile kimlik doğrulama: Token nasıl üretilir, nasıl doğrulanır?
JWT ile kimlik doğrulamayı işliyoruz: token nedir, üç parçası ne anlama gelir, neden imzalanır, sunucu neden durum tutmaz ve .NET'te token üretip doğrulamayı adım adım kuruyoruz.
Authentication ve authorization: Kimlik doğrulama ile yetkilendirme arasındaki fark
Çoğu geliştiricinin karıştırdığı iki kavramı ayırıyoruz: authentication (sen kimsin?) ile authorization (neye iznin var?). Aradaki fark, doğru sıra ve .NET'te bu ikisinin nasıl konumlandığı.
API versioning: Eski istemcileri kırmadan API'yi geliştirmek
API'yi zamanla geliştirirken eski istemcileri nasıl kırmayacağımızı işliyoruz: kırıcı değişiklik nedir, versiyonlama neden gerekli, URL/header/query yöntemleri ve .NET'te versiyonlamayı kurmak.
Pagination, filtering ve sorting: Büyük listeleri verimli döndürmek
Binlerce kayıtlı bir listeyi verimli döndürmeyi işliyoruz: sayfalama (pagination), filtreleme ve sıralama; IQueryable'ın tembel doğası, Skip/Take mantığı ve sorgunun veritabanında çalışmasını sağlamak.
Async/await: API'de doğru asenkron kullanım
Async/await'in gerçekte ne yaptığını işliyoruz: senkron ve asenkron farkı, Task nedir, bir API'nin neden asenkron olması gerektiği, ölçeklenebilirliğe etkisi ve sık yapılan hatalar.