День 1549. #ЗаметкиНаПолях
Используем Группы Конечных Точек для Версионирования Минимальных API
В ASP.NET Core 7 значительно улучшены минимальные API, в частности добавлена функция групп конечных точек. Это способ объявить некоторую общую информацию о маршрутизации для нескольких конечных точек, а также добавить общие ограничения, такие как авторизация, правила CORS и т. д.
Группы конечных точек позволяют управлять версиями API. Просто добавляем базовый маршрут в метод MapGroup, например: MapGroup("/v1") или MapGroup("/v2").
ASP.NET Core 7 предоставляет класс RouteGroupBuilder для создания правил и группировки конечных точек. Создадим две группы конечных точек:
public static class MyGroups
{
public static RouteGroupBuilder
Group1(this RouteGroupBuilder g)
{
g.MapGet("/", () =>
Results.Ok(new List<int> { 1, 2, 3 }));
g.MapGet("/{id}", (int id) =>
Results.Ok(id));
return g;
}
public static RouteGroupBuilder
Group2(this RouteGroupBuilder g)
{
g.MapGet("/", () =>
Results.Ok(new List<int> { 4, 5, 6 }));
g.MapGet("/{id}", (int id) =>
Results.Ok(id + 1));
return g;
}
}
Для удобства мы сгруппировали конечные точки в отдельных методах расширения. Теперь добавим ограничения и базовый маршрут к каждой группе в основном файле Program.cs. Кроме того, для демонстрации различий добавим Swagger, установив NuGet пакет Microsoft.AspNetCore.OpenApi и добавив необходимые методы расширения:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
// Demo group endpoints
app.MapGroup("/v1")
.Group1()
.RequireCors("CorsPolicy1")
.AllowAnonymous()
.WithTags("v1");
app.MapGroup("/v2")
.Group2()
.RequireCors("CorsPolicy2")
.RequireAuthorization()
.RequireRateLimiting("LimitPolicy")
.WithTags("v2");
app.Run();
Как видите, к первой группе применена одна политика CORS, а ко второй группе — другая, а также правила авторизации и ограничения скорости https://t.me/NetDeveloperDiary/1487. Также для удобства отображения в SwaggerUI каждой группе добавлены теги с помощью метода WithTags(…). Результат на картинке ниже.
Источник: https://anthonygiretti.com/2023/03/16/asp-net-core7-use-endpoint-groups-to-manage-minimal-apis-versioning/