Denetleyici tabanlı API'ler ile en düşük API'ler arasında seçim yapma
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
ASP.NET Core, API oluşturmaya yönelik iki yaklaşımı destekler: denetleyici tabanlı bir yaklaşım ve en düşük API'ler. BIR API projesindeki denetleyiciler, 'den ControllerBasetüretilen sınıflardır. Minimum API'ler , lambda veya yöntemlerdeki mantıksal işleyicilerle uç noktaları tanımlar. Bu makalede iki yaklaşım arasındaki farklar gösterilmektedir.
Minimum API'lerin tasarımı, konak sınıfını varsayılan olarak gizler ve işlevleri lambda ifadeleri olarak alan uzantı yöntemleri aracılığıyla yapılandırma ve genişletilebilirlik konularına odaklanır. Denetleyiciler, oluşturucu ekleme veya özellik ekleme yoluyla bağımlılıkları alabilen ve genellikle nesne odaklı desenleri izleyen sınıflardır. En düşük API'ler, hizmet sağlayıcısına erişme gibi diğer yaklaşımlar aracılığıyla bağımlılık eklemeyi destekler.
Denetleyiciler temelinde bir API için örnek kod aşağıda verilmiştir:
namespace APIWithControllers;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
}
}
using Microsoft.AspNetCore.Mvc;
namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
Aşağıdaki kod, en düşük API projesinde aynı işlevselliği sağlar. Minimum API yaklaşımının lambda ifadelerine ilgili kodu dahil ettiğini görebilirsiniz.
namespace MinimalAPI;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpsRedirection();
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", (HttpContext httpContext) =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
})
.ToArray();
return forecast;
});
app.Run();
}
}
Her iki API projesi de aşağıdaki sınıfa başvurur:
namespace APIWithControllers;
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
En düşük API'ler, denetleyici tabanlı API'lerle aynı özelliklere sahiptir. Birden çok API'ye ölçeklendirmek, karmaşık yolları işlemek, yetkilendirme kuralları uygulamak ve API yanıtlarının içeriğini denetlemek için gereken yapılandırmayı ve özelleştirmeyi destekler. Henüz desteklenmeyen veya en düşük API'ler tarafından uygulanmayan denetleyici tabanlı API'lerde kullanılabilen birkaç özellik vardır. Bu modüller şunlardır:
- Model bağlama için yerleşik destek yok (IModelBinderProvider, IModelBinder). Özel bağlama dolgusu ile destek eklenebilir.
- DoğrulamaIModelValidator () için yerleşik destek yok.
- Uygulama parçaları veya uygulama modeli için destek yoktur. Kendi kurallarınızı uygulamanın veya oluşturmanın hiçbir yolu yoktur.
- Yerleşik görünüm işleme desteği yok. Görünümleri işlemek için Sayfalar'ı kullanmanızı Razor öneririz.
- JsonPatch için destek yok
- OData için destek yok
Ayrıca bkz.
ASP.NET Core, API oluşturmaya yönelik iki yaklaşımı destekler: denetleyici tabanlı bir yaklaşım ve en düşük API'ler. BIR API projesindeki denetleyiciler, 'den ControllerBasetüretilen sınıflardır. Minimum API'ler , lambda veya yöntemlerdeki mantıksal işleyicilerle uç noktaları tanımlar. Bu makalede iki yaklaşım arasındaki farklar gösterilmektedir.
Minimum API'lerin tasarımı, konak sınıfını varsayılan olarak gizler ve işlevleri lambda ifadeleri olarak alan uzantı yöntemleri aracılığıyla yapılandırma ve genişletilebilirlik konularına odaklanır. Denetleyiciler, oluşturucu ekleme veya özellik ekleme yoluyla bağımlılıkları alabilen ve genellikle nesne odaklı desenleri izleyen sınıflardır. En düşük API'ler, hizmet sağlayıcısına erişme gibi diğer yaklaşımlar aracılığıyla bağımlılık eklemeyi destekler.
Denetleyiciler temelinde bir API için örnek kod aşağıda verilmiştir:
namespace APIWithControllers;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
}
}
using Microsoft.AspNetCore.Mvc;
namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
Aşağıdaki kod, en düşük API projesinde aynı işlevselliği sağlar. Minimum API yaklaşımının lambda ifadelerine ilgili kodu dahil ettiğini görebilirsiniz.
namespace MinimalAPI;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpsRedirection();
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", (HttpContext httpContext) =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
})
.ToArray();
return forecast;
});
app.Run();
}
}
Her iki API projesi de aşağıdaki sınıfa başvurur:
namespace APIWithControllers;
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
En düşük API'ler, denetleyici tabanlı API'lerle aynı özelliklere sahiptir. Birden çok API'ye ölçeklendirmek, karmaşık yolları işlemek, yetkilendirme kuralları uygulamak ve API yanıtlarının içeriğini denetlemek için gereken yapılandırmayı ve özelleştirmeyi destekler. Henüz desteklenmeyen veya en düşük API'ler tarafından uygulanmayan denetleyici tabanlı API'lerde kullanılabilen birkaç özellik vardır. Bu modüller şunlardır:
- Model bağlama için yerleşik destek yok (IModelBinderProvider, IModelBinder). Özel bağlama dolgusu ile destek eklenebilir.
- Formlardan bağlama desteği yok. Bu bağlamayı IFormFileiçerir.
- DoğrulamaIModelValidator () için yerleşik destek yok.
- Uygulama parçaları veya uygulama modeli için destek yoktur. Kendi kurallarınızı uygulamanın veya oluşturmanın hiçbir yolu yoktur.
- Yerleşik görünüm işleme desteği yok. Görünümleri işlemek için Sayfalar'ı kullanmanızı Razor öneririz.
- JsonPatch için destek yok
- OData için destek yok
Ayrıca bkz.
ASP.NET Core