C# Web API – Derek Comartin'in Yaklaşımı ile API'lerin Yapılandırılmasına Kapsamlı Bir Bakış
[[academy-video-youtube({"vid": "4inJy5iKWp4", "start_time": "0", "title": "C# Kodunuzu Basitleştirmenin 14 Yolu", "creator": "Tim Corey", "length": "44m 57s"})]]
C# Web API projesine başlarken, geliştiriciler çoğunlukla kodlarını nasıl oluşturacaklarına dair çok sayıda seçimle karşı karşıya kalırlar. Katmanlı bir ASP.NET Core Web API deseni mi takip etmelisiniz? Visual Studio'daki varsayılan şablondan gelen controlör klasörüne mi bağlı kalmalısınız? Yoksa Daha Minimal API'lar gibi daha modern bir stil denemelisiniz?
Derek Comartin, CodeOpinion.com'den 'Proje Yapınızı Basit Tutun!' videosunda, görüşe dayalı, ancak ferahlatıcı bir şekilde pratik bir duruş sergiliyor. Gerçek dünya yazılım sistemleri için işe yarayan bir Web API oluşturma ve düzenleme geliştirmeler konusundaki fikirlerini anlatırken, aslında neyin önemli olduğunu değil: basitliği vurguluyor.
Bu makale, Derek'in videosunu adım adım takip ederek, ASP.NET Core Web API projenizi netlik, sürdürebilirlik ve gerçek dünya ölçeklenebilirliği için nasıl yapılandıracağınızı rehberlik ediyor.
Yaygın API Yapılarına Bakış
Derek, Visual Studio'da yeni bir Web API projesi oluştururken çoğu geliştiricinin sorduğu soruyu sorarak başlıyor:
"HTTP API'nizi nasıl yapılandırmalısınız?"
Hemen belirtir ki, Web API projeleri birçok farklı şekilde düzenlenebilir. Derek'in gördüğü en yaygın klasör yapıları arasında:
Teknik endişelere göre gruplama - modelleri Models klasöründe, kontrolörleri Controllers klasöründe ve servisleri Services klasöründe toplama.
Clean Architecture veya Onion Architecture kullanımı - projelerin katmanlara (API, Application, Domain, Infrastructure) göre dinamiklerini yönlendirmek için ayrıldığı.
- Domain-Driven Design (DDD) ile dikey dilim mimarisini birleştirerek - son noktaları özellikle gruplama ama yine domain-rich nesnelere sahip olma.
Derek, bu desenlerin her birinin, kaynaklarla çalışmak için beklediğiniz HTTP yöntemlerini (GET, POST, PUT, DELETE) kullanan bir RESTful API oluşturabileceğini vurgular. Ancak, yalnızca klasör yapılarına çok fazla bakmamaya karşı uyarır:
"Varlıklar, toplamlar veya domain servisleri görebilirsiniz, ancak bu kodun gerçekten domain odaklı tasarım yaptığı anlamına gelmez—sadece bu desenleri kullanıyor."
Basitlikle Başlamak, Karmaşıklık Değil
Derek, amacının basit olduğunu söylüyor:
"Bu yapı ile elde etmek istediğim ana şeylerden biri sadelikti."
.NET Framework tarzı karmaşık bir mimariye atlamamak veya ders kitaplarından desenleri kopyalamak yerine, Derek ASP.NET Core Minimal API'leri tercih ediyor. Neden? Çünkü kontrolörlerin ve hazır kodların yükü olmadan API'lar oluşturmayı kolaylaştırıyorlar.
Visual Studio veya hatta Visual Studio Code'da yeni bir Web API projesi oluşturduğunuzda, Yeni Proje Diyalog Kutusundan başlayabilir ve ASP.NET Core Web API'yi seçebilirsiniz. Varsayılan olarak, kontrolörler, klasörler ve çok sayıda iskelet alırsınız. Derek, daha küçük, basit ve temiz bir yapıyla başlamanın genellikle daha iyi olduğunu savunuyor.
Derek'in Web API'sinin Ana Yapısı
Derek, .NET Core kullanarak web uygulama yapısını tanıtır. Farklı yazılım uygulamalarının iletişimini sağlamak için yaygın HTTP hizmetlerini ve RESTful API'ları desteklemek için inşa edilmiştir.
İşte web API projesini nasıl düzenlediği:
Son Noktalar Dosyası – API'deki tüm mevcut yolları görmek için tek bir dosya. Derek'in, birden çok denetleyicide derinlemesine dolaşmak yerine, API'nin desteklediği her get yöntemi, post yöntemi, put isteği veya delete talebine hızlı bir genel bakış istediği bir
Ortak Klasör – Farklı yazılım sistemlerinde kullanılan filtreler ve eklentiler gibi paylaşılan kodları barındırır.
Özellik Klasörleri – dikey dilim felsefesi izleyerek, her yeni kaynak veya mevcut kaynak kendi klasörünü alır. Örneğin, Posts klasörü, GET /posts/
{id}, POST /posts, PUT /posts/{id}, ve DELETE /posts/{id}için gereken her şeyi içerebilir.- Veri Klasörü – veri modelini ve varlık eşlemelerini içerir. Burada, Entity Framework Core, veritabanı entegrasyonunu problemsiz hale getirmek için kullanılabilir.
Sonları özelliklere göre gruplandırarak, Derek mantığı çok sayıda ilgisiz klasörde yaymaktan kaçınıyor.
Domain-Driven Design'ı Zorlamaması
Derek geçmişte Domain-Driven Design kullandı, ancak bu C# Web API yapısında önemli bir tercih yapıyor:
"Alan odaklı tasarım kullanmayacağız."
Bunun yerine, "verilerin veri olmasına" izin verir. Veri modelleri, şu gibi basit özellikler içeren düz sınıflardır:
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
}public class Post
{
public int Id { get; set; }
public string Title { get; set; }
}Gereksiz davranışlar sıkıştırılmaz. Yeni bir kaynak oluşturmak için POST isteği gönderdiğinizde, API bunu basitçe kaydeder. Bir id parametresi ile DELETE isteği gönderdiğinizde, o kaynağı siler.
Bu yaklaşım, API uç noktalarını Post, User veya Comment gibi kaynaklar üzerinde çalışan fiiller (get yöntemi, post yöntemi, put yöntemi, delete yöntemi) olarak ele alarak Temsili Durum Transferi (REST) mimari stilini benimser.
Visual Studio'da Çözümü İncelemek
Bu aşamada, Derek kendi Visual Studio çözümünü açar ve bize bir tur attırır:
Endpoints dosyası, bir GET isteği veri çağırma, bir POST isteği yeni kaynak ekleme, bir PUT isteği veri güncelleme veya bir DELETE yöntemi mevcut bir kaynağı kaldırma olup olmadığını listeleyen her rotayı listeler.
Data klasörü, Entity Framework aracılığıyla veritabanına bağlanan Post, User ve Comment gibi varlıkların eşlemelerini barındırır.
Common klasörü, doğrulama filtreleri ve uzantılar gibi HTTP hizmetleri için paylaşılan mantık içerir.
- Her Özellik Klasörü (Posts, Comments, Authentication) o kaynak için gereken tüm kodu içerir.
Bu temiz proje klasör düzeni, karmaşık bir proje diyaloğu veya dağınık bir denetleyici klasöründe kazmayı önler.
Bir Uç Noktayı Parçalarına Ayırma
Derek, ASP.NET Core Web API'sindeki her uç noktanın üç belirgin adımla birlikte kendi içinde çalışma birimi olduğunu açıklar:
Eşleme – HTTP yöntemi ve rotayı tanımlar. Örneğin, bir silme isteği DELETE /posts/
{id}ile bir işleyici yöntemine eşlenebilir.İstek ve Yanıt Sözleşmeleri – Her uç noktanın kendi istek gövdesi ve yanıt türü vardır. Bu, HTTP hizmetlerini daha net hale getirir ve yinelenen DTO katmanları oluşturmayı önler.
- Mantık – API'nin veritabanından aldığı, veri modelini güncellediği veya return CreatedAtAction veya return NoContent gibi bir durum kodu döndürdüğü gerçek işleyici yöntem.
Derek, Minimal APIs kullandığı için bu işleyiciler statik yöntemlerdir. ASP.NET Core ile bu, bağımlılıkları doğrudan enjekte edebileceğiniz anlamına gelir – hantal denetleyici sınıfına gerek yoktur.
Minimal APIs Neden Doğru Hissettirir
Derek, Minimal APIs'leri basitlikleri için övgüyle bahseder. ASP.NET Core'un minimal şablonu ile sadece birkaç satır kodla Program.cs içerisinde bir web API projesine başlayabilirsiniz:
var app = WebApplication.CreateBuilder(args).Build();var app = WebApplication.CreateBuilder(args).Build();O andan itibaren, get yöntemlerinizi, post yöntemlerinizi ve put isteklerinizi doğrudan bir şekilde ekleyebilirsiniz.
Bu sadelik, Derek'in sıkça gördüğü aşırı mühendisliği önlemeye yardımcı olur: geliştiriciler her küçük uç nokta için nuget paketi şablonlarını veya yeni denetleyici sınıflarını körü körüne kopyaladığında olduğu gibi.
Zamanla Karmaşıklık Nasıl Gelişebilir
Derek gerçek bir örnek verir: "bir gönderiyi beğenme" özelliği.
İlk başta, basittir—bir beğeni olup olmadığını kontrol edin, yoksa ekleyin.
Ancak daha sonra yazılım uygulaması, web sayfaları veya mobil cihazlar için anında bir beğeni sayısı döndürme ihtiyacı duyabilir.
- Ölçeklendirme için, Post veri modeline bir LikeCount özelliği ekleyerek verileri denormalize edebilirsiniz.
Bu yeni zorluklar doğurur:
Beğenileri etkileyen her put yöntemi veya delete yöntemi sayıyı doğru güncellemelidir.
- Biri API'yi çağırmadan bir beğeni kaydı eklerse, sayı yanlış olur.
Derek, karmaşıklık arttıkça aşağıdaki desenleri ekleyebileceğinizi gösterir:
Veri erişimini kapsülleyen depo deseni.
Davranışları (LikeCount artırmak gibi) yönetmek için kök topluluklar.
- "PostLiked" gibi olayların yayınlandığından emin olmak için dış ortam deseni.
Ancak ana noktası açıktır:
"Buradan başlamayın. Eğer gerekirse sadece basitle başlayın ve gelişin."
Derek'in Ders Çıkarımı ile Sonuçlandırma
Derek, C# Web API geliştiricileri için ana dersine geri dönerek sona erer:
"Basit ile başlayın."
Visual Studio'da ASP.NET Core Web API veya ASP.NET Web API kullanırken, ilk günden itibaren aşırı mühendislik yapmak kolaydır—her gördüğünüz klasörü, deseni ve NuGet paketini ekleyerek.
Ancak Derek uyarır: çözümleri kör gözle uygulamayın. Hangi HTTP yöntemlerine ihtiyaç duyduğunuzu, çalışacağınız veriyi ve iletişim sağladığınız yazılım sistemlerini anlayın. RESTful API'lerinizi adım adım oluşturun.
Visual Studio Code veya başka bir entegre geliştirme ortamı kullananlar için tavsiyesi geçerlidir: Yeni bir proje veya mevcut bir kaynak olsun, proje yapınızı mümkün olduğunca basit tutun ve sadece gerçek dünya karmaşıklığı talep ettiğinde desenler ekleyin.
Sonuç
Derek Comartin'in videosu sadece bir C# Web API inşa etme kılavuzu değil—aynı zamanda iyi mimarinin karmaşadan değil, netlikten başladığını hatırlatır. Gerçek dünya ASP.NET Core Web API kurulumunu Visual Studio'da adım adım inceleyerek, Minimal APIs, özellik klasörleri ve doğrudan veri modellerinin çeşitli yazılım uygulamaları arasında kesintisiz iletişimi mümkün kılan RESTful API'lerin temellerini nasıl oluşturabileceğini gösterir.
Bunu harekete geçerken görmek ve Derek'in bakış açısını ilk elden duymak istiyorsanız, videosu mükemmel bir kaynaktır. Onun kanalı, yazılım sistemleri, web hizmetleri ve ASP.NET Core gelişimi hakkında eşit derecede anlayışlı tartışmalarla doludur—zanaatlarını geliştirmek ve projelerini temiz, pratik ve geleceğe uygun tutmak isteyen her geliştirici için kaçınılmaz bir takip alanı.

