Note
Níže uvedená dokumentace k projektu je automaticky generovaná službou GitHub Copilot.
TechEd 2025 - Ukázka automatického generování C# Web API z OpenAPI specifikace
Tento projekt demonstruje automatické generování kódu pro ASP.NET Core Web API z OpenAPI (OAS) specifikace. Aplikace se skládá ze dvou hlavních částí:
- Codegen - Konzolová aplikace pro generování C# kódu z OpenAPI specifikace
- WebApi - ASP.NET Core Web API aplikace využívající vygenerovaný kód
Aplikace implementuje systém pro správu workshopů s následujícími funkcemi:
GET /workshops- Seznam workshopů s možností filtrování a stránkováníPOST /workshops- Vytvoření nového workshopuGET /workshops/{id}- Detail konkrétního workshopuPUT /workshops/{id}- Aktualizace workshopuDELETE /workshops/{id}- Odstranění workshopuGET /registrations- Seznam registrací na workshopyDELETE /registrations/{id}- Odstranění registrace
Z OpenAPI specifikace se automaticky generují:
- Endpoint handlery - Implementace HTTP endpointů s příslušnými parametry
- Kontrakty - C# třídy pro request/response modely
- Validátory - FluentValidation validátory pro vstupní data
- Routing - Konfigurace tras s příslušnými omezeními typů
Codegen/
├── Program.cs # Hlavní vstupní bod generátoru
├── ApiRoutesGenerator.cs # Generování endpoint handlerů
├── ContractGenerator.cs # Generování C# tříd pro DTOs
├── ValidatorGenerator.cs # Generování FluentValidation validátorů
├── Helpers/
│ └── GenHelpers.cs # Pomocné metody pro generování
├── Dto/ # Interní DTO třídy
└── workshopy.openapi.json # OpenAPI specifikace
WebApi/
├── Program.cs # Konfigurace ASP.NET Core aplikace
├── Generated/ # Vygenerovaný kód
│ ├── ApiRoutes.cs # Registrace všech API tras
│ ├── Endpoints/ # Jednotlivé endpoint handlery
│ ├── Contracts/ # Request/Response DTOs
│ └── Validators/ # FluentValidation validátory
├── Data/ # Databázová vrstva (Entity Framework)
├── ErrorHandling/ # Zpracování chyb a výjimek
└── Constraints/ # Vlastní route constraints
- Načtení OpenAPI specifikace - Ze souboru
workshopy.openapi.json - Analýza operací - Projití všech definovaných API operací
- Generování komponent:
- Pro každou operaci se vytvoří endpoint handler
- Z request schémat se generují C# třídy a validátory
- Z response schémat se generují výstupní DTOs
- Vytvoření registrace - Automatické propojení všech endpointů
public static class CreateWorkshopApi
{
/// <summary>
/// Vytvoření workshopu
/// </summary>
public static RouteHandlerBuilder CreateWorkshop(this IEndpointRouteBuilder api)
{
return api.MapPost("/workshops", async ([FromBody]CreateWorkshopRequest model,
[FromServices]ContractValidator validator, [FromServices]AppDbContext db) =>
{
validator.EnsureValid(model);
return Results.Created();
});
}
}public partial class CreateWorkshopRequest
{
public string Title { get; set; }
public string Description { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int MaxParticipants { get; set; }
}- .NET 9.0 SDK
- ASP.NET Core
- Entity Framework Core (In-Memory databáze)
- FluentValidation
- Microsoft.OpenApi
cd Codegen
dotnet runTento příkaz přečte OpenAPI specifikaci a vygeneruje všechny potřebné C# soubory do složky WebApi/Generated/.
cd WebApi
dotnet runAPI bude dostupné na https://localhost:5001 nebo http://localhost:5000.
Generátor automaticky mapuje OpenAPI datové typy na odpovídající C# typy:
string→stringinteger→intnumber→double/decimal/floatboolean→boolstring(date)→DateTimestring(uuid)→Guid
Automaticky se generují route constraints na základě OpenAPI schémat:
{id:int}pro integer parametry{id:guid}pro UUID parametry{id:apid}pro vlastní formát^[a-z0-9]{8}$
Pro každý request model se automaticky generuje FluentValidation validátor s pravidly odvozenými z OpenAPI schématu.
- Konzistence - API je vždy v souladu s OpenAPI specifikací
- Rychlost vývoje - Automatické generování eliminuje ruční kódování
- Údržba - Změny v API se provedou pouze v OpenAPI specifikaci
- Dokumentace - OpenAPI specifikace slouží jako živá dokumentace
- Validace - Automatické generování validačních pravidel
Generátor lze snadno rozšířit o další funkce:
- Generování dokumentace
- Generování klientských SDK
- Podpora dalších HTTP operací
- Pokročilá validační pravidla
- Generování testů
Tento projekt demonstruje moderní přístup k vývoju REST API pomocí OpenAPI specifikace a automatického generování kódu, což je klíčové téma pro efektivní vývoj API aplikací.