ASP.NET Core ile Web API Oluşturma ve Yönetme Yöntemleri
ASP.NET Core, Microsoft tarafından geliştirilen ve web uygulamaları, mikro servisler, masaüstü uygulamaları gibi çeşitli uygulama türlerini geliştirmek için kullanılan açık kaynaklı bir framework’tür. Bu makalede, ASP.NET Core kullanarak nasıl etkili ve performanslı Web API’ler oluşturabileceğinizi ve yönetebileceğinizi ele alacağız. Web API’leri, özellikle modern yazılım geliştirme süreçlerinde, farklı uygulamalar arasında veri alışverişini sağlamak için kritik bir rol oynamaktadır.
1. ASP.NET Core Web API’ye Giriş
ASP.NET Core, platformlar arası çalışabilen, modüler ve yüksek performanslı bir framework olarak öne çıkmaktadır. Web API’ler, RESTful servisler oluşturmak için sıklıkla tercih edilen bir yöntemdir. ASP.NET Core ile Web API oluşturmak, esnek yapılandırma seçenekleri ve güçlü bir middleware desteği sunar.
1.1. ASP.NET Core Projesi Oluşturma
ASP.NET Core ile Web API geliştirmeye başlamak için öncelikle bir proje oluşturmanız gerekmektedir. Bu işlemi Visual Studio veya .NET CLI (Komut Satırı Arayüzü) kullanarak yapabilirsiniz.
dotnet new webapi -n MyWebAPI
Yukarıdaki komut, “MyWebAPI” adında yeni bir ASP.NET Core Web API projesi oluşturur.
2. Controller ve Routing
Web API’lerde, HTTP isteklerini işlemek için Controller sınıfları kullanılır. ASP.NET Core, routing (yönlendirme) mekanizması sayesinde istekleri doğru Controller ve Action’a yönlendirir.
2.1. Controller Sınıfı Oluşturma
Bir Controller sınıfı, genellikle bir modelle ilişkilidir ve HTTP isteklerini işleyen action metodlarını içerir.
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class ProductsController : ControllerBase { [HttpGet] public IActionResult GetAllProducts() { // Ürünleri veritabanından çek ve döndür return Ok(new List{ "Product1", "Product2" }); } }
Bu örnekte, ProductsController
sınıfı, HTTP GET isteklerini işleyerek ürün listesini döndürmektedir.
2.2. Routing Yapılandırması
Routing, URL’leri belirli Controller ve Action metodlarına eşleştirmek için kullanılır. ASP.NET Core’da, attribute routing ve convention-based routing olmak üzere iki tür routing kullanabilirsiniz.
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
Bu yapılandırma, uygulamanın tüm Controller’ları ve action metodlarını otomatik olarak haritalandırır.
3. Model Binding ve Validation
ASP.NET Core, gelen istek verilerini model nesnelerine bağlamak için model binding mekanizmasını kullanır. Bu, özellikle POST ve PUT isteklerinde önemlidir.
3.1. Model Binding
Model binding, HTTP isteklerinden gelen verileri otomatik olarak model nesnelerine dönüştürür.
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } [HttpPost] public IActionResult CreateProduct([FromBody] Product product) { if (!ModelState.IsValid) { return BadRequest(ModelState); } // Ürünü veritabanına kaydet return CreatedAtAction(nameof(GetProductById), new { id = product.Id }, product); }
Bu örnekte, CreateProduct
metodu, HTTP POST isteği ile gönderilen Product
modelini alır ve doğrulama yapar.
3.2. Validation
Model doğrulama, model binding işlemi sırasında otomatik olarak gerçekleşir. ASP.NET Core, veri anotasyonları kullanarak model doğrulama sağlar.
public class Product { public int Id { get; set; } [Required] public string Name { get; set; } [Range(0.01, 1000.00)] public decimal Price { get; set; } }
[Required]
ve [Range]
gibi anotasyonlar, modelin doğrulama kurallarını belirtir.
4. Dependency Injection ve Servis Katmanı
ASP.NET Core, dependency injection (bağımlılık enjeksiyonu) desteği ile uygulamanın test edilebilirliğini ve esnekliğini artırır. Servis katmanı, iş mantığını ve veri erişimini kontrol eder.
4.1. Dependency Injection Kullanımı
Dependency injection, uygulamanın bileşenlerini daha gevşek bağlı hale getirir.
public interface IProductService { IEnumerableGetAllProducts(); } public class ProductService : IProductService { public IEnumerable GetAllProducts() { // Veritabanından ürünleri çek return new List { new Product { Id = 1, Name = "Product1", Price = 10.0M } }; } } public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddScoped (); }
Bu örnekte, ProductService
sınıfı, IProductService
arayüzünü uygular ve servis katmanı olarak görev yapar.
4.2. Servis Katmanı Kullanımı
Controller sınıflarında servis katmanını kullanarak iş mantığını yönetebilirsiniz.
public class ProductsController : ControllerBase { private readonly IProductService _productService; public ProductsController(IProductService productService) { _productService = productService; } [HttpGet] public IActionResult GetAllProducts() { var products = _productService.GetAllProducts(); return Ok(products); } }
ProductsController
, IProductService
’i kullanarak ürün listesini alır ve döndürür.
5. Güvenlik ve Kimlik Doğrulama
Web API’lerin güvenliği, kullanıcı verilerini ve sistem kaynaklarını korumak için kritik öneme sahiptir. ASP.NET Core, JWT (JSON Web Token) gibi çeşitli kimlik doğrulama mekanizmalarını destekler.
5.1. JWT Kimlik Doğrulama
JWT, kullanıcının kimliğini doğrulamak için yaygın olarak kullanılan bir yöntemdir.
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "yourdomain.com", ValidAudience = "yourdomain.com", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey")) }; }); }
Bu yapılandırma, JWT kullanarak kimlik doğrulama işlemini gerçekleştirir.
5.2. Yetkilendirme
Yetkilendirme, kullanıcının belirli kaynaklara erişim iznini kontrol eder.
[Authorize] [HttpGet("{id}")] public IActionResult GetProductById(int id) { // Ürünü veritabanından çek ve döndür return Ok(new Product { Id = id, Name = "Product1", Price = 10.0M }); }
[Authorize]
attribute’u, bu metodun yalnızca yetkili kullanıcılar tarafından erişilebileceğini belirtir.
6. Performans Optimizasyonu ve Ölçeklenebilirlik
ASP.NET Core, yüksek performans ve ölçeklenebilirlik sağlamak için çeşitli optimizasyon teknikleri sunar.
6.1. Caching
Caching, sık kullanılan verilerin bellekte saklanarak hızlı erişim sağlanmasına yardımcı olur.
public void ConfigureServices(IServiceCollection services) { services.AddResponseCaching(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseResponseCaching(); } [HttpGet] [ResponseCache(Duration = 60)] public IActionResult GetCachedData() { // Cache'den veri döndür return Ok(new { Data = "Cached Data" }); }
Bu örnekte, GetCachedData
metodu, 60 saniye boyunca cache’de saklanır.
6.2. Yük Dengeleme ve Ölçeklenebilirlik
Yük dengeleme, web API’nin ölçeklenebilirliğini artırmak için kullanılır. Cloud Sunucular veya VDS Sunucular kullanarak uygulamanızın yükünü dağıtabilirsiniz.
7. Hata Yönetimi ve Loglama
Hata yönetimi ve loglama, uygulamanın kararlılığını artırmak için kritik öneme sahiptir.
7.1. Hata Yönetimi
ASP.NET Core, global hata yönetimi için bir middleware sunar.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } }
Bu yapılandırma, hata yönetimini ve hata sayfalarını yapılandırır.
7.2. Loglama
Loglama, uygulamanın durumunu izlemek ve hata ayıklamak için kullanılır.
public class ProductsController : ControllerBase { private readonly ILogger_logger; public ProductsController(ILogger logger) { _logger = logger; } [HttpGet] public IActionResult GetAllProducts() { _logger.LogInformation("Ürünler getiriliyor."); // Ürünleri veritabanından çek ve döndür return Ok(new List { "Product1", "Product2" }); } }
Bu örnekte, ILogger
kullanılarak loglama işlemi gerçekleştirilir.
ASP.NET Core ile Web API geliştirmek, yüksek performanslı ve güvenli uygulamalar oluşturmak için güçlü bir platform sunar. Bu makalede ele alınan yöntemler ve teknikler, Web API’lerinizi daha verimli bir şekilde yönetmenize ve optimize etmenize yardımcı olacaktır. Ayrıca, Sanal Sunucular ve Yurt Dışı Lokasyon Sanal Sunucular gibi çözümlerle uygulamalarınızı daha geniş kitlelere ulaştırabilirsiniz.