Altbilgi içeriğine atla
Iron Academy Logo
C# Uygulaması
C# Uygulaması

Diğer Kategoriler

C# Web API - Derek Comartin'in Yaklaşımıyla API Yapıları Üzerine Tam Bir Bakış

Tim Corey
44m 57s

Bir C# Web API projesine başlarken, geliştiriciler genellikle kodlarını nasıl yapılandıracakları konusunda çok fazla seçenekle karşı karşıya kalır. Katmanlı bir ASP.NET Core Web API kalıbını mı takip etmelisiniz? Visual Studio'nun varsayılan şablonundaki denetleyiciler klasörüne mi bağlı kalmalısınız? Yoksa Minimal ApIs gibi daha modern bir tarz mı denemelisiniz?

CodeOpinion.com'dan Derek Comartin'in "Proje Yapınızı Basit Tutun!" başlıklı videosu, görüşlü ancak ferahlatıcı derecede pratik bir yaklaşım sergiliyor. Gerçek dünya yazılım sistemleri için işe yarayan bir Web API oluşturma ve organize etme fikirlerini ele alır; asıl önemli olan konuya, yani sadeliğe odaklanır.

Bu makale, Derek'in videosunu adım adım takip eder ve ASP.NET Core Web API projenizi netlik, sürdürülebilirlik ve gerçek dünya ölçeklenebilirliği için nasıl yapılandıracağınızı rehberlik eder.

Yaygın API Yapılarına Bakış

Derek, Visual Studio'da yeni bir Web API projesi oluştururken çoğu geliştiricinin karşılaşacağı soruyu sorarak başlar:

"HTTP API'nizi nasıl yapılandırmalısınız?"

Hemen Web API projelerinin birçok farklı şekilde organize edilebileceğini kabul ediyor. Derek'in gördüğü en yaygın klasör yapıları arasında:

  • Teknik endişelere göre gruplama – modelleri Modeller klasörüne, denetleyicileri Denetleyiciler klasörüne, servisleri Hizmetler'e koymak.

  • Temiz Mimari veya Soğan Mimarisi kullanma – bağımlılıkları yönlendirmek için projelerin katmanlar (API, Uygulama, Alan, Altyapı) ile bölündüğü yer.

  • Dikey kesit mimarisiyle Domain-Driven Design (DDD) birleştirme – uç noktaları özelliklerle gruplayarak fakat yine de alan zengin nesnelerine sahip olma.

Derek, bu kalıplardan her birinin, kaynaklarla çalışmak için bekleyeceğiniz (GET, POST, PUT, DELETE) HTTP yöntemlerini kullanan RESTful bir API oluşturabileceğini vurgular. Ama sadece klasör yapılarından çok fazla anlam çıkarılmaması konusunda uyarıyor:

"Varlıklar, agrega veya alan servisleri görebilirsiniz, ama bu kodun gerçekten alan odaklı tasarım yaptığı anlamına gelmez—sadece bu kalıpları kullanıyor."

Sadelikle Başlamak, Karmaşıklıkla Değil

Derek, hedefinin basit olduğunu söylüyor:

"Bu yapı ile ulaşmak istediğim ana şeylerden biri sadeliktir."

.NET Framework tarzı ağır bir mimariye atlamak veya ders kitaplarından kalıpları kopyalamak yerine, Derek ASP.NET Core Minimal ApIs'yi seçiyor. Neden? Çünkü denetleyiciler ve gereksiz kod yükü olmadan API oluşturmayı kolaylaştırıyorlar.

Visual Studio'da veya hatta Visual Studio Code'da yeni bir Web API projesi oluşturduğunuzda, Yeni Proje Diyalogu ile başlayıp ASP.NET Core Web API'yi seçebilirsiniz. Varsayılan olarak, denetleyiciler, klasörler ve çok miktarda altyapı ile karşılaşırsınız. Derek, daha küçük başlamanın—basit ve temiz bir yapının—genellikle daha iyi olduğunu ileri sürüyor.

Derek'in Web API'sinin Temel Yapısı

Derek, .NET Core kullanarak web uygulaması yapısını tanıtır. Farklı yazılım uygulamalarının iletişim kurabilmesini sağlayan yaygın HTTP hizmetlerini ve RESTful API'leri desteklemek için inşa edilmiştir.

Web API projesini şu şekilde organize ediyor:

  • Uç Noktalar Dosyası – API'deki tüm mevcut rotaları görmek için tek bir dosya. Birden fazla denetleyici arasında gezmek yerine, Derek, API'nin desteklediği her get yöntemi, post yöntemi, put isteği veya delete isteğinin hızlı bir genel görünümünü ister.

  • Ortak Klasör – Farklı yazılım sistemlerinde kullanılan filtreler ve genişletmeler gibi paylaşılan kodları barındırır.

  • Özellik Klasörleri – dikey kesit felsefesine uygun olarak, her yeni kaynak veya mevcut kaynak kendi klasörüne sahiptir. Örneğin, bir Gönderiler 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 modeli ve varlık eşlemelerini içerir. Burada, Entity Framework Core sorunsuz veritabanı entegrasyonu için kullanılabilir.

Uç noktaları özelliklere göre gruplandırarak, Derek, mantığın birden çok ilgisiz klasöre yayılmasını engeller.

Domen-Yönelimli Tasarımı Zorlamama Nedeni

Derek, geçmişte Domain-Driven Design kullandı, ancak bu C# Web API yapısında önemli bir seçim yapıyor:

"Domain-Yönelimli Tasarımı kullanmayacağız."

Bunun yerine, "sadece veriyi veri olarak bırakıyor." Veri modelleri sadece basit özelliklere sahip düz sınıflardır, örneğin:

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 şişirilmez. Yeni bir kaynak oluşturmak için bir POST isteği gönderdiğinizde, API sadece onu kaydeder. Bir DELETE isteği gönderdiğinizde ve bir id parametresi belirttiğinizde, o kaynağı siler.

Bu yaklaşım, API uç noktalarını kaynaklar üzerinde hareket eden fiiller (get yöntemi, post yöntemi, put yöntemi, delete yöntemi) olarak kabul ederek Temsili Durum Transferi (REST) mimari tarzını kucaklar.

Visual Studio'da Çözümü Gezinme

Bu noktada, Derek Visual Studio çözümünü açar ve bize bir tur sunar:

  • Uç Noktalar dosyası, bir GET isteğinin veri çekmesi, bir POST isteğinin yeni bir kaynak eklemesi, bir PUT isteğinin veriyi güncellemesi veya bir DELETE yönteminin mevcut bir kaynağı kaldırması olsun, her rotayı listeler.

  • Veri klasörü, Entity Framework aracılığıyla bir veritabanına bağlanan Post, Kullanıcı, ve Yorum gibi varlıklar için eşlemeleri barındırır.

  • Ortak klasör, doğrulama filtreleri ve genişletmeler gibi HTTP hizmetleri için paylaşılan mantığı içerir.

  • Her Özellik Klasörü (Gönderiler, Yorumlar, Kimlik Doğrulama) o kaynak için gereken tüm kodu içerir.

Bu temiz proje klasörü düzeni, karmaşık bir proje diyalogu veya dağınık bir denetleyiciler klasörü içinde saplanıp kalmaktan kaçınır.

Bir Uç Noktayı Parçalama

Derek, ASP.NET Core Web API içindeki her bir uç noktanın üç net adımda kendi içinde bir çalışma birimi olduğunu açıklar:

  1. Yapı Haritalama – HTTP yöntemini ve rotasını tanımlar. Örneğin, bir silme isteği DELETE /posts/{id} bir işleyici yöntemine eşlenebilir.

  2. İstek ve Yanıt Sözleşmeleri – Her uç noktaya ait kendi istek gövdesi ve yanıt türü vardır. Bu, HTTP hizmetlerini daha net hale getirir ve katman katman yinelenen DTO'lar oluşturmayı önler.

  3. Mantık – API'nin veritabanından aldığı, bir veri modeli güncellediği veya return CreatedAtAction ya da return NoContent gibi bir durum kodu döndürdüğü gerçek işleyici yöntemidir.

Derek Minimal APIs'ler 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—gösterişli bir denetleyici sınıfına gerek duymadan.

Neden Minimal APIs Doğru Hissediyor

Derek, Minimal APIs'leri sadelikleri için över. ASP.NET Core'un minimal şablonu ile, Program.cs'de sadece birkaç satır ile bir web API projesi başlatabilirsiniz:

var app = WebApplication.CreateBuilder(args).Build();
var app = WebApplication.CreateBuilder(args).Build();

Buradan itibaren, get yöntemlerinizi, post yöntemlerinizi ve put isteklerinizi doğrudan bir şekilde ekleyebilirsiniz.

Bu sadelik, Paket şablonlarını körü körüne kopyalamak veya her küçük uç nokta için yeni denetleyici sınıfları zorlamak gibi aşırı mühendislikten kaçınmaya yardımcı olur.

Zamanla Karmaşıklığın Nasıl Evrilebileceği

Derek gerçek bir örnek verir: "gönderiyi beğen" özelliği.

  • İlk başta, basittir – bir beğeni olup olmadığını kontrol et, yoksa ekle.

  • Ama daha sonra, yazılım uygulaması, web sayfalar veya mobil cihazlar için beğeni sayısını anında döndürmesi gerekebilir.

  • Ölçeklenebilmek için, beğeni sayısını temel verilerle bazen denormalize edebilirsiniz; örneğin, Gönderi veri modeline LikeCount özelliğini eklemek.

Bu yeni zorluklar açar:

  • Beğenileri etkileyen her put yöntemi veya delete yöntemi sayıyı doğru bir şekilde 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 kalıpları ekleyebileceğinizi gösterir:

  • Veritabanı erişimini kapsüllemek için depo kalıbı.

  • LikeCount gibi davranışları yönetmek için kök agregalar.

  • Etkinliklerin yayınlanma garantisini sağlamak için outbox kalıbı (örneğin, "BeğeniAlındı" gibi).

Ama asıl ana noktası şudur:

"Buradan başlamayın. Basitlikle başlayın ve sadece gerekiyorsa evrimleşin."

Derek'in Tüm Derslerini Paketleyerek

Derek, C# Web API geliştiricileri için ana dersine dönerek bitiriyor:

"Basitlikle başlayın."

Visual Studio'da ASP.NET Core Web API veya ASP.NET Web API'sini kullandığınızda, ilk günden itibaren aşırı mühendislik yapmak kolaydır—her klasörü, kalıbı ve gördüğünüz her NuGet paketini eklemek.

Ama Derek, çözümleri körü körüne uygulamamanız konusunda uyarır. İhtiyacınız olan HTTP yöntemlerini, çalıştığınız verileri ve iletişim kurmalarını sağladığınız yazılım sistemlerini anlayın. RESTful API'lerinizi adım adım inşa edin.

Visual Studio Code veya başka bir entegre geliştirme ortamı kullananlar için tavsiyesi doğru kalır: İster yeni bir proje ister mevcut bir kaynak olsun, proje yapınızı olabildiğince basit tutun ve yalnızca gerçek dünya karmaşıklığı gerektirdiğinde kalıplar ekleyin.

Sonuç

Derek Comartin'in videosu bir C# Web API'si oluşturmak için bir rehberden çok daha fazlasıdır; iyi mimarinin karmaşıklıktan 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 API'lerin, özellik klasörlerinin ve basit veri modellerinin, tasarımın aşırı karmaşık hale gelmesini önlerken farklı yazılım uygulamaları arasında sorunsuz iletişimi sağlayan RESTful API'lerin temelini nasıl oluşturabileceğini gösteriyor.

Bu yaklaşımı eylemde görmek ve Derek'in perspektifini birinci elden duymak istiyorsanız, onun videosu mükemmel bir kaynaktır. Kanalı, yazılım sistemleri, web servisleri ve ASP.NET Core geliştirme üzerine eşit derecede bilgili tartışmalarla dolu - zanaatini geliştirmek ve projelerini temiz, pratik ve geleceğe dönük tutmak isteyen her geliştiricinin takip etmesi gereken bir kaynak.

Hero Worlddot related to C# Web API - Derek Comartin'in Yaklaşımıyla API Yapıları Üzerine Tam Bir Bakış
Hero Affiliate related to C# Web API - Derek Comartin'in Yaklaşımıyla API Yapıları Üzerine Tam Bir Bakış

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js üzerinde çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara