Minimal API / gRPC
Тема дорожной карты · .NET / C# Developer
Minimal API — это упрощённый стиль определения HTTP-эндпойнтов в ASP.NET Core, появившийся в .NET 6. Вместо MVC-контроллеров и атрибутов вся маршрутизация описывается напрямую в Program.cs через app.MapGet("/users/{id}", (int id) => ...). Для микросервисов это сокращает бойлерплейт на ~70%. gRPC — альтернатива HTTP+JSON для high-performance межсервисного общения через Protobuf-схемы, особенно когда обе стороны на .NET.
Как это работает
Minimal API принимает routing template, делегат-обработчик и опциональные метаданные (.WithName(), .WithOpenApi(), .RequireAuthorization()). Параметры делегата автоматически биндятся: примитивы из route или query, сложные объекты из body, сервисы из DI. Возвращаемое значение преобразуется в IResult через Results.Ok(), Results.NotFound() и т.д. Endpoint filters добавляют валидацию и cross-cutting логику. gRPC использует контракт-first подход: .proto файл описывает сервисы и сообщения, Grpc.Tools генерирует C#-классы при сборке, регистрация — builder.Services.AddGrpc() и app.MapGrpcService<MyService>(). HTTP/2 multiplexing и Protobuf-сериализация дают throughput в разы выше JSON.
Когда применять
Minimal API подходит для микросервисов, BFF-слоёв, прокси, простых REST API. Для сложных доменов с большим количеством endpoints всё ещё удобнее MVC-контроллеры (группировка, фильтры, общие зависимости). gRPC выбирайте, когда обе стороны под вашим контролем, важен throughput (тысячи RPS+), идёт server-to-server, или нужен server-side streaming. Для публичных API клиентам проще REST+OpenAPI, а не Protobuf.
Типичные ошибки
Гигантский Program.cs со всеми endpoint-ами в одном месте — выносите в extension-методы app.MapUserEndpoints(). Использование Minimal API там, где нужны фильтры (validation, logging) на каждом действии — MVC-контроллеры проще. gRPC без TLS в продакшене — HTTP/2 cleartext (h2c) работает в dev, но reverse-proxy не всегда поддерживает. Версионирование gRPC через breaking changes в .proto — всегда добавляйте новые поля с новыми номерами.