ASP.NET Core ile RESTful API Geliştirme Rehberi
ASP.NET Core, Microsoft tarafından geliştirilen ve modern web uygulamaları geliştirmek için kullanılan güçlü bir çerçevedir. RESTful API’ler, uygulamalar arasında veri alışverişi yapmanın standart bir yolu haline gelmiştir. Bu rehberde, ASP.NET Core kullanarak RESTful API geliştirme sürecini adım adım inceleyeceğiz.
1. RESTful API Nedir?
REST (Representational State Transfer), web servisleri için bir mimari tarzdır. RESTful API’ler, HTTP protokolünü kullanarak veri iletimi yapar ve bu iletimi genellikle JSON veya XML formatında gerçekleştirir. RESTful API’lerin temel özellikleri şunlardır:
– Stateless (Durumsuzluk): Her API çağrısı bağımsızdır ve önceki çağrılar hakkında bilgi taşımaz.
– Cacheable (Önbelleğe Alınabilirlik): Yanıtlar önbelleğe alınabilir.
– Client-Server (İstemci-Sunucu Mimarisi): İstemci ve sunucu birbirinden bağımsızdır.
– Uniform Interface (Tekdüze Arayüz): Kaynaklar URI’ler aracılığıyla tanımlanır ve standart HTTP metodları (GET, POST, PUT, DELETE) kullanılır.
2. ASP.NET Core ile Proje Oluşturma
ASP.NET Core ile RESTful API geliştirmeye başlamak için ilk adım bir proje oluşturmaktır. Visual Studio veya .NET CLI kullanarak bir ASP.NET Core Web API projesi oluşturabilirsiniz.
Visual Studio Kullanarak Proje Oluşturma
1. Visual Studio’yu açın ve “Create a new project” seçeneğini tıklayın.
- “ASP.NET Core Web API” şablonunu seçin ve “Next” butonuna tıklayın.
- Hedef çerçeve olarak “.NET 6.0” veya daha yeni bir sürümü seçin ve “Create” butonuna tıklayın.
.NET CLI Kullanarak Proje Oluşturma
Aşağıdaki komut, .NET CLI kullanarak yeni bir ASP.NET Core Web API projesi oluşturur:
dotnet new webapi -n MyApiProject
Bu komut, “MyApiProject” adında yeni bir Web API projesi oluşturur.
3. Controller ve Route Yapılandırması
ASP.NET Core’da, RESTful API’ler genellikle Controller sınıfları aracılığıyla tanımlanır. Controller’lar, gelen HTTP isteklerini işler ve uygun yanıtları döner.
Controller Oluşturma
Aşağıda, bir “Products” controller örneği bulunmaktadır:
using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; namespace MyApiProject.Controllers { [ApiController] [Route("api/[controller]")] public class ProductsController : ControllerBase { [HttpGet] public IEnumerableGet() { return new string[] { "Product1", "Product2" }; } [HttpGet("{id}")] public string Get(int id) { return $"Product{id}"; } [HttpPost] public void Post([FromBody] string value) { } [HttpPut("{id}")] public void Put(int id, [FromBody] string value) { } [HttpDelete("{id}")] public void Delete(int id) { } } }
Bu controller, ürünlerle ilgili CRUD (Create, Read, Update, Delete) işlemlerini gerçekleştirmek için gerekli olan temel HTTP metodlarını içerir.
4. Dependency Injection ve Servis Katmanı
ASP.NET Core, Dependency Injection (DI) için yerleşik bir destek sunar. Bu, uygulamanın farklı bölümlerinin birbirine sıkı sıkıya bağlı olmasını önler ve test edilebilirliği artırır.
Servis Katmanı Oluşturma
Öncelikle bir servis arayüzü ve uygulaması oluşturalım:
public interface IProductService { IEnumerableGetAllProducts(); string GetProductById(int id); } public class ProductService : IProductService { public IEnumerable GetAllProducts() { return new List { "Product1", "Product2", "Product3" }; } public string GetProductById(int id) { return $"Product{id}"; } }
Servislerin Bağımlılık Olarak Eklenmesi
Startup.cs dosyasında, servisleri DI konteynerine ekleyin:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddScoped(); }
Bu, ProductService
sınıfının IProductService
arayüzü üzerinden enjekte edilebilmesini sağlar.
5. Veritabanı Entegrasyonu
Gerçek dünya uygulamalarında, veriler genellikle bir veritabanında saklanır. ASP.NET Core, Entity Framework Core (EF Core) kullanarak veritabanı işlemlerini kolaylaştırır.
Entity Framework Core Kurulumu
EF Core’u projenize eklemek için, aşağıdaki NuGet paketlerini yükleyin:
dotnet add package Microsoft.EntityFrameworkCore dotnet add package Microsoft.EntityFrameworkCore.SqlServer
DbContext ve Model Tanımlama
Örnek bir Product
modeli ve DbContext
sınıfı tanımlayalım:
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } public class AppDbContext : DbContext { public AppDbContext(DbContextOptionsoptions) : base(options) { } public DbSet Products { get; set; } }
Veritabanı Bağlantısı ve Migration
Startup.cs
dosyasında, veritabanı bağlantı ayarlarını yapın:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddScoped (); services.AddControllers(); }
Ardından, veritabanı migration’larını uygulayın:
dotnet ef migrations add InitialCreate dotnet ef database update
6. Güvenlik ve Yetkilendirme
API güvenliği, RESTful servislerin en önemli bileşenlerinden biridir. ASP.NET Core, güvenlik ve yetkilendirme için bir dizi araç sunar.
JWT (JSON Web Token) ile Kimlik Doğrulama
JWT, kullanıcı kimlik doğrulaması için yaygın olarak kullanılan bir yöntemdir. JWT kullanarak, API’lerinizin güvenliğini artırabilirsiniz.
JWT kimlik doğrulaması için gerekli paketleri yükleyin:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Startup.cs
dosyasında, JWT ayarlarını yapılandırın:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; }); services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddScoped (); services.AddControllers(); }
Yetkilendirme Attribütleri Kullanma
Controller veya metod seviyesinde yetkilendirme uygulamak için [Authorize]
attribütünü kullanabilirsiniz:
[Authorize] [HttpGet] public IEnumerableGet() { return new string[] { "Product1", "Product2" }; }
Bu, ilgili metodun yalnızca kimliği doğrulanmış kullanıcılar tarafından erişilebilir olmasını sağlar.
7. Performans Optimizasyonu
API performansını artırmak için bir dizi strateji uygulayabilirsiniz. Bunlar arasında önbellekleme, sıkıştırma ve veri optimizasyonu bulunur.
Response Caching
ASP.NET Core, yanıtların önbelleğe alınmasını sağlayan bir Response Caching
middleware sunar. Bu, aynı isteklerin tekrar tekrar işlenmesini önleyerek performansı artırır.
Startup.cs
dosyasında, önbellekleme middleware’ini etkinleştirin:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseResponseCaching(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
Controller üzerinde [ResponseCache]
attribütünü kullanarak önbellekleme ayarlarını yapabilirsiniz:
[HttpGet] [ResponseCache(Duration = 60)] public IEnumerableGet() { return new string[] { "Product1", "Product2" }; }
Bu, yanıtın 60 saniye boyunca önbelleğe alınmasını sağlar.
8. Hata Yönetimi
Hataların düzgün bir şekilde ele alınması, API’nizin güvenilirliğini artırır. ASP.NET Core, hata yönetimi için bir dizi araç sunar.
Global Hata Yönetimi
Startup.cs
dosyasında, global hata yönetimi middleware’ini yapılandırabilirsiniz:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
Özel Hata Mesajları
Controller metodlarında özel hata mesajları dönebilirsiniz:
[HttpGet("{id}")] public IActionResult Get(int id) { try { var product = _productService.GetProductById(id); if (product == null) { return NotFound(new { Message = "Product not found" }); } return Ok(product); } catch (Exception ex) { return StatusCode(500, new { Message = "An error occurred", Details = ex.Message }); } }
Bu, API kullanıcılarına daha anlamlı hata mesajları sağlar.
9. Yayınlama ve Barındırma
API’nizi yayınlamak ve barındırmak için çeşitli seçenekler mevcuttur. VDS Sunucular, Cloud Sunucular veya Dedicated Sunucu gibi hizmetler kullanarak API’nizi güvenli ve ölçeklenebilir bir şekilde barındırabilirsiniz.
Yayınlama Adımları
1. Projenizi derleyin ve yayınlayın:
dotnet publish -c Release
2. Yayınlanan dosyaları seçtiğiniz sunucuya yükleyin.
- Sunucu yapılandırmalarını yaparak API’nizi erişilebilir hale getirin.
Bu rehberde, ASP.NET Core kullanarak RESTful API geliştirme sürecini kapsamlı bir şekilde ele aldık. ASP.NET Core’un esnek yapısı ve geniş araç seti sayesinde, güçlü ve ölçeklenebilir API’ler geliştirmek mümkündür. Uygulamalarınızı daha da güçlendirmek için uygun sunucu ve barındırma çözümlerini tercih edebilirsiniz.