ASP.NET Core ile Restful API Geliştirme Teknikleri
ASP.NET Core, Microsoft tarafından geliştirilmiş açık kaynaklı, platformlar arası bir çerçevedir ve özellikle Restful API geliştirme için güçlü araçlar sunar. Restful API’ler, web servislerinin HTTP protokolü üzerinden iletişim kurmasını sağlayan bir mimari tarzıdır. Bu yazıda, ASP.NET Core ile Restful API geliştirme sürecinde dikkate alınması gereken teknik detayları ve en iyi uygulamaları ele alacağız.
1. Proje Yapılandırması ve Başlangıç
ASP.NET Core ile Restful API geliştirmeye başlamak için öncelikle bir proje oluşturmanız gerekmektedir. .NET CLI kullanarak yeni bir Web API projesi oluşturabilirsiniz:
dotnet new webapi -n MyRestfulAPI
Bu komut, “MyRestfulAPI” adında yeni bir Web API projesi oluşturur. Proje yapısında, Controllers
klasörü altında API denetleyicilerinizi oluşturabilirsiniz. Startup.cs
dosyası ise uygulamanızın yapılandırmasını ve servislerini tanımladığınız yerdir.
2. Denetleyiciler ve Eylemler
ASP.NET Core’da, denetleyiciler (controllers) API uç noktalarını tanımlar. Her denetleyici bir sınıftır ve bu sınıflar ControllerBase
sınıfından türetilir. Örneğin, bir ProductsController
oluşturmak için aşağıdaki gibi bir yapı kullanabilirsiniz:
using Microsoft.AspNetCore.Mvc; [Route("api/[controller]")] [ApiController] public class ProductsController : ControllerBase { [HttpGet] public IActionResult GetAllProducts() { // Ürünleri veri kaynağından al ve döndür return Ok(new List{ "Product1", "Product2" }); } }
Bu örnekte, GetAllProducts
eylemi HTTP GET isteği ile çağrılır ve ürünlerin listesini döndürür.
3. Model Bağlama ve Doğrulama
Model bağlama, gelen HTTP isteklerinden verilerin alınarak model nesnelerine dönüştürülmesi işlemidir. ASP.NET Core, model bağlama işlemini otomatik olarak gerçekleştirir. Ayrıca, model doğrulama için DataAnnotations
kullanılabilir:
public class Product { [Required] public string Name { get; set; } [Range(0, 1000)] public decimal Price { get; set; } }
Bu modelde, Name
alanının zorunlu olduğu ve Price
alanının 0 ile 1000 arasında bir değer alabileceği belirtilmiştir. Denetleyici eylemlerinde model doğrulama hatalarını kontrol edebilirsiniz:
[HttpPost] public IActionResult CreateProduct([FromBody] Product product) { if (!ModelState.IsValid) { return BadRequest(ModelState); } // Ürünü veri kaynağına ekle return CreatedAtAction(nameof(GetAllProducts), new { id = product.Id }, product); }
4. İstemci-Server İletişimi ve JSON Formatı
Restful API’ler genellikle JSON formatında veri alışverişi yapar. ASP.NET Core, JSON formatında veri döndürmek için System.Text.Json
veya Newtonsoft.Json
kütüphanelerini kullanabilir. Startup.cs
dosyasında JSON ayarlarını yapılandırabilirsiniz:
public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; }); }
Bu ayar, JSON verilerinde varsayılan olarak kullanılan camelCase yerine orijinal alan adlarının kullanılmasını sağlar.
5. Güvenlik ve Kimlik Doğrulama
Restful API’lerin güvenliğini sağlamak için kimlik doğrulama ve yetkilendirme mekanizmaları kullanılmalıdır. ASP.NET Core, JWT (JSON Web Token) kimlik doğrulama için yerleşik destek sunar. JWT, istemcinin kimliğini doğrulamak için kullanılan bir token formatıdır. Startup.cs
dosyasında JWT kimlik doğrulama ayarlarını yapılandırabilirsiniz:
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")) }; }); services.AddControllers(); }
Bu yapılandırma, JWT tokenlarının doğrulanması için gerekli parametreleri belirler. İstemci, sunucuya her istek gönderdiğinde geçerli bir JWT token sağlamalıdır.
6. Performans Optimizasyonu
Restful API’lerin performansını artırmak için çeşitli optimizasyon teknikleri uygulanabilir. Bunlardan biri, yanıtların önbelleğe alınmasıdır. ASP.NET Core, yanıtların önbelleğe alınması için ResponseCache
özniteliğini sağlar:
[HttpGet] [ResponseCache(Duration = 60)] public IActionResult GetCachedData() { // 60 saniye boyunca önbelleğe alınacak veri return Ok("This is cached data."); }
Bu öznitelik, belirli bir süre boyunca yanıtların önbelleğe alınmasını sağlar ve böylece sunucu yükünü azaltır.
7. Hata Yönetimi ve Günlükleme
API geliştirme sürecinde hata yönetimi ve günlükleme önemlidir. ASP.NET Core, hata yönetimi için ExceptionFilter
ve günlükleme için ILogger
arayüzünü kullanır. Global hata yönetimi için bir özel hata filtresi oluşturabilirsiniz:
public class GlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Hata günlüğe kaydedilir context.Result = new ObjectResult("An error occurred.") { StatusCode = 500 }; } }
Bu filtre, tüm denetleyicilerde meydana gelen hataları yakalar ve standart bir hata yanıtı döndürür.
8. Yayınlama ve Dağıtım
API’nizi geliştirdikten sonra, uygun bir sunucu ortamına dağıtmanız gerekir. ASP.NET Core uygulamaları, çeşitli barındırma seçenekleriyle uyumludur. Örneğin, VDS Sunucular veya Cloud Sunucular üzerinde API’nizi barındırabilirsiniz. Bu tür sunucular, yüksek performans ve ölçeklenebilirlik sağlar.
9. Gerçek Dünya Senaryoları
Gerçek dünya uygulamalarında, Restful API’ler genellikle karmaşık iş mantıklarını yönetir. Örneğin, bir e-ticaret platformu için ürün yönetimi, sipariş işleme ve kullanıcı hesap yönetimi gibi modüller oluşturabilirsiniz. Bu modüller, API’nin ölçeklenebilirliğini ve esnekliğini artırmak için mikro hizmet mimarisi ile tasarlanabilir.
ASP.NET Core, bu tür senaryolar için güçlü bir temel sunar ve geliştiricilere geniş bir araç seti sağlar. API’lerinizi optimize etmek ve güvenliğini sağlamak için yukarıda belirtilen teknikleri ve en iyi uygulamaları kullanabilirsiniz.
Sonuç olarak, ASP.NET Core ile Restful API geliştirme, modern web uygulamaları için esnek ve güçlü bir çözüm sunar. Doğru yapılandırma ve optimizasyon teknikleri ile yüksek performanslı ve güvenli API’ler oluşturabilirsiniz.