ASP Genel VMware

ASP.NET Core ile Web API Oluşturma ve Yönetme Yöntemleri

ASP.NET Core ile Web API Oluşturma ve Yönetme Yöntemleri

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
{
    IEnumerable GetAllProducts();
}

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.