ASP.NET Core ile RESTful API Geliştirme Yöntemleri
ASP.NET Core, modern web uygulamaları geliştirmek için kullanılan güçlü bir framework’tür ve RESTful API’ler oluşturmak için de ideal bir platform sunar. Bu makalede, ASP.NET Core ile RESTful API geliştirme sürecini, temel yapı taşlarını ve en iyi uygulama yöntemlerini detaylı bir şekilde ele alacağız.
RESTful API Nedir?
RESTful API’ler, Representational State Transfer (REST) mimari tarzına uygun olarak geliştirilmiş web servisleridir. REST, HTTP protokolünü kullanarak kaynaklara erişim sağlar ve bu kaynakları temsil eden JSON veya XML gibi formatlarda veri döner. RESTful API’ler, kaynak odaklı bir yapıya sahiptir ve genellikle CRUD (Create, Read, Update, Delete) işlemleri üzerinden çalışır.
ASP.NET Core ile RESTful API Geliştirme
1. Proje Kurulumu
ASP.NET Core ile RESTful API geliştirmeye başlamak için öncelikle bir proje oluşturmanız gerekir. Bunun için Visual Studio veya .NET CLI kullanılabilir. İşte .NET CLI kullanarak bir ASP.NET Core Web API projesi oluşturma adımları:
dotnet new webapi -n MyRestfulApi cd MyRestfulApi dotnet run
Bu komutlar, yeni bir Web API projesi oluşturur ve çalıştırır. Proje oluşturulduktan sonra, Startup.cs
ve Program.cs
dosyalarında gerekli konfigürasyonlar yapılabilir.
2. Controller ve Route Yapılandırması
ASP.NET Core’da controller’lar, API’nin temel yapı taşlarıdır. Controller’lar, HTTP isteklerini işler ve uygun yanıtları döner. Aşağıda, basit bir ProductsController
örneği bulunmaktadır:
using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; namespace MyRestfulApi.Controllers { [Route("api/[controller]")] [ApiController] public class ProductsController : ControllerBase { [HttpGet] public ActionResult<IEnumerable> Get() { return new string[] { "Product1", "Product2" }; } } }
Bu örnek, GET /api/products
isteğine yanıt veren basit bir controller’ı göstermektedir. [Route(“api/[controller]”)]
ifadesi, controller adını otomatik olarak URL’nin bir parçası olarak kullanır.
3. Model Binding ve Validasyon
Model binding, gelen HTTP isteklerini otomatik olarak .NET nesnelerine dönüştürme sürecidir. ASP.NET Core, model binding işlemini kolaylaştırır ve aynı zamanda model validasyonu için çeşitli özellikler sunar. İşte bir ürün modeli ve validasyon örneği:
using System.ComponentModel.DataAnnotations; namespace MyRestfulApi.Models { public class Product { public int Id { get; set; } [Required] [StringLength(100, MinimumLength = 3)] public string Name { get; set; } [Range(0.01, 1000.00)] public decimal Price { get; set; } } }
Bu model, ürün adının zorunlu olduğunu ve belirli bir uzunlukta olması gerektiğini belirtir. Ayrıca, fiyatın belirli bir aralıkta olması gerektiğini de tanımlar.
4. Dependency Injection
ASP.NET Core, yerleşik Dependency Injection (DI) desteği ile gelir. DI, uygulama bileşenlerinin bağımlılıklarını dışarıdan sağlamasına olanak tanır. Aşağıda, bir ürün servisi ve bu servisin DI ile kullanımı gösterilmektedir:
public interface IProductService { IEnumerable GetAllProducts(); } public class ProductService : IProductService { public IEnumerable GetAllProducts() { return new List { new Product { Id = 1, Name = "Product1", Price = 10.00M }, new Product { Id = 2, Name = "Product2", Price = 20.00M } }; } } // Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddScoped<IProductService, ProductService>(); }
Bu kod, IProductService
arayüzünü ve ProductService
sınıfını tanımlar. Startup.cs
dosyasında, AddScoped
metodu ile servisin DI konteynerine eklendiğini görebilirsiniz.
5. Hata Yönetimi ve İstisna İşleme
RESTful API geliştirirken, hata yönetimi ve istisna işleme kritik öneme sahiptir. ASP.NET Core, hata yönetimini kolaylaştırmak için bir dizi araç sunar. Aşağıda, global hata yönetimi için bir middleware örneği verilmiştir:
public class ExceptionHandlingMiddleware { private readonly RequestDelegate _next; public ExceptionHandlingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } } private static Task HandleExceptionAsync(HttpContext context, Exception exception) { context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; return context.Response.WriteAsync(new ErrorDetails { StatusCode = context.Response.StatusCode, Message = "Internal Server Error" }.ToString()); } } // Startup.cs public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseMiddleware(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
Bu middleware, uygulama genelinde meydana gelen istisnaları yakalar ve bir hata mesajı döner.
6. Performans Optimizasyonu
RESTful API’lerin performansını artırmak için çeşitli yöntemler bulunmaktadır. Bunlar arasında caching, veri sıkıştırma ve uygun veri tabanı sorguları yer alır. Aşağıda, ASP.NET Core’da caching kullanımı gösterilmektedir:
public void ConfigureServices(IServiceCollection services) { services.AddResponseCaching(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseResponseCaching(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } [HttpGet] [ResponseCache(Duration = 60)] public ActionResult<IEnumerable> Get() { return new string[] { "CachedProduct1", "CachedProduct2" }; }
Bu örnek, ResponseCache
attribute’u kullanarak yanıtların 60 saniye boyunca cache’lenmesini sağlar.
7. Güvenlik ve Kimlik Doğrulama
RESTful API’lerin güvenliği, kimlik doğrulama ve yetkilendirme mekanizmaları ile sağlanır. ASP.NET Core, JWT (JSON Web Tokens) kullanarak kimlik doğrulama işlemlerini kolaylaştırır. İşte JWT kullanarak kimlik doğrulama örneği:
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")) }; }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseAuthentication(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
Bu yapılandırma, JWT token’larının doğrulanmasını sağlar ve API’nin güvenli bir şekilde kullanılmasına olanak tanır.
8. Dağıtım ve Barındırma
RESTful API’lerinizi dağıtmak ve barındırmak için çeşitli seçenekler bulunmaktadır. Bulut sunucular, sanal sunucular veya fiziksel sunucular üzerinde barındırma yapabilirsiniz. Özellikle VDS Sunucular ve Cloud Sunucular gibi çözümler, esneklik ve ölçeklenebilirlik sağlar.
ASP.NET Core ile RESTful API geliştirme süreci, modern web uygulamaları için güçlü ve esnek bir altyapı sunar. Bu makalede ele alınan konular, API’lerinizi daha verimli, güvenli ve performanslı hale getirmenize yardımcı olacaktır.