Graves
- 9 Eki 2024
- 10,458 Mesaj
- TIM Görevleri
- 2
Aktiflik
Seviye
Deneyim
ASP.NET Core ile Minimal API Mimarisi Mikroservis Uyumlu Web Projeleri
Merhabalar Ben @Phobos Lojistik grup adına paylaşılan ASP.NET Core ile Minimal API Mimarisi Mikroservis Uyumlu Web Projeleri makalesinde sizi görmekten mutluyum.
Minimal API yapısı, ASP.NET Core 6.0 ile gelen sadeleştirilmiş bir REST API geliştirme yöntemidir. Özellikle mikroservis mimarisi gibi küçük, bağımsız, kolay dağıtılabilir servis yapıları için oldukça uygundur.
Avantajları
Bu örnekte MapGet metodu ile bir GET isteği yakalanır ve doğrudan yanıt döndürülür. Klasik controller veya view yapısı yoktur.
Bu yapıda bağımlılık enjeksiyonu (Dependency Injection) kullanılmıştır. Servis doğrudan API metoduna parametre olarak alınabilir.
Minimal API, ASP.NET Core’un modern geliştirme yöntemlerinden biridir. Mikroservis mimarisi için sunduğu avantajlar
Merhabalar Ben @Phobos Lojistik grup adına paylaşılan ASP.NET Core ile Minimal API Mimarisi Mikroservis Uyumlu Web Projeleri makalesinde sizi görmekten mutluyum.
Minimal API yapısı, ASP.NET Core 6.0 ile gelen sadeleştirilmiş bir REST API geliştirme yöntemidir. Özellikle mikroservis mimarisi gibi küçük, bağımsız, kolay dağıtılabilir servis yapıları için oldukça uygundur.
Minimal API Nedir?
Minimal API, geleneksel Controller tabanlı mimariye kıyasla daha az kod ile RESTful servisler geliştirmeyi sağlar. Startup.cs, Controllers gibi klasör yapıları olmadan, doğrudan Program.cs içerisinde tüm yapı kurulabilir.Avantajları
- Basit ve okunabilir yapı
- Hızlı geliştirme
- Küçük servisler için ideal
- Daha düşük bellek kullanımı
Basit Bir Minimal API Örneği
Kod:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Merhaba Minimal API!");
app.Run();
Katmanlı Yapı ile Kullanım (Service, Repository, Model)
Minimal API'de sade yapı korunurken, yazılım geliştirme prensiplerine uygun olarak katmanlı yapı kullanılabilir.a) Model
Kod:
public class Kullanici
{
public int Id { get; set; }
public string Ad { get; set; }
}
b) Repository
Kod:
public interface IKullaniciRepo
{
IEnumerable<Kullanici> GetirHepsi();
}
Kod:
public class KullaniciRepo : IKullaniciRepo
{
public IEnumerable<Kullanici> GetirHepsi()
{
return new List<Kullanici>
{
new Kullanici { Id = 1, Ad = "Ali" },
new Kullanici { Id = 2, Ad = "Ayşe" }
};
}
}
c) Service Register & API Mapleme
Kod:
// builder.Services içerisine repo ekleniyor
builder.Services.AddScoped<IKullaniciRepo, KullaniciRepo>();
var app = builder.Build();
app.MapGet("/kullanicilar", (IKullaniciRepo repo) =>
{
return Results.Ok(repo.GetirHepsi());
});
app.Run();
Kimlik Doğrulama (JWT Örneği)
Minimal API ile birlikte JWT (JSON Web Token) kullanarak API’yi koruma altına alabilirsiniz.
Kod:
// Program.cs içine eklenir
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(opt =>
{
opt.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidIssuer = "User",
ValidAudience = "User",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("gizliAnahtar123456"))
};
});
Kod:
// Korunan endpoint örneği
app.MapGet("/gizli", [Authorize] () => "Bu veri sadece yetkililere açıktır.");
Mikroservislerde Minimal API Kullanımı
Minimal API ile geliştirilen her bir servis bağımsız bir uygulama olarak dağıtılabilir. Örneğin- Kullanıcı Servisi (/api/kullanicilar)
- Ürün Servisi (/api/urunler)
- Sipariş Servisi (/api/siparisler)
Mikroservisler Arası İletişim
Minimal API içinden başka bir mikroservise HTTP isteği göndermek için HttpClient kullanılır:
Kod:
builder.Services.AddHttpClient();
app.MapGet("/urunler-dis", async (IHttpClientFactory factory) =>
{
var client = factory.CreateClient();
var response = await client.GetStringAsync("http://urun-servisi/api/urunler");
return Results.Ok(response);
});
Swagger Entegrasyonu (API Dokümantasyonu)
Minimal API’de Swagger ile kolayca dokümantasyon sunabilirsiniz:
Kod:
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
- Küçük boyutlu, bağımsız çalışabilen servisler
- Daha az karmaşa ile hızlı geliştirme
- Dağıtım ve container işlemlerine tam uyum
- Gelişmiş performans ve bellek kullanımı


