Minimal API’s in .Net 6, een eerste indruk
Ook dit jaar zijn er tijdens de .Net Conference weer een hoop mooie nieuwe ontwikkelingen getoond, maar één van de hoogtepunten was toch wel de introductie van minimal API’s. Tijdens deze sessie werd getoond dat het ontwikkelen van een API een stuk sneller kan dankzij deze nieuwe manier van backend ontwikkelen. Wordt dit echter dé manier om de backend van je projecten voortaan in te richten..? In dit blog bespreek ik wat minimal API’s zijn en deel ik mijn inzichten hierover.
Wat zijn Minimal API’s?
.NET 6 biedt ons met de komst van minimal API’s dus een alternatief om onze backend op te zetten. Zoals de naam al aangeeft is deze nieuwe stijl gericht op het reduceren van onze boiler-template code waar je bij MVC veelal mee te maken hebt.
Wanneer je in Visual Studio 2022 (of later) een nieuwe web applicatie project aanmaakt, valt dit dan ook gelijk op. De structuur van een project bestaat alleen nog een uit Program.cs, appsettings.json en een .csproj file. In tegenstelling tot de voorgaande versies van .NET zijn de Main(), Startup.cs (incl. Configure() en ConfigureServices()) en de map voor controllers eruit gehaald.
De opzet van Program.cs is sterk vereenvoudigd middels de top-level statements feature uit C# 9 en de global usings uit C# 10 om de applicatie te configureren, bouwen en runnen. Hieronder zie je een voorbeeld van een minimal API in de meest simpele vorm:
Figuur 1: Voorbeeld van minimal API
Het enige wat deze code doet is onze applicatie bouwen, een endpoint toevoegen en de mogelijkheid om onze applicatie te runnen.
Extra features
Een “normale” API bevat echter meer functionaliteiten dan alleen het voorbeeld van figuur1.
In de volgende afbeelding voeg ik daarom de volgende mogelijkheden toe:
- Swagger documentatie
- Authenticatie
- Cors
- Dependency Injections
- Endpoint beveiliging middels JWT authenticatie
Figuur 2: Voorbeeld minimal API met extra features
Het eerste dat opvalt is dat de Program.cs zich snel uitbreid wanneer je meerdere endpoints zou toevoegen met als gevolg dat deze snel onoverzichtelijk wordt tegenover minder boiler-template code. De keuze van architectuur is dan ook belangrijk bij het bouwen van een minimal API.
Feature based architectuur
Eén van de manieren om de uitdaging van onoverzichtelijkheid van je Program.cs op te lossen is middels het ontwikkelen van een module per feature. De meest eenvoudige manier is om een extensie methode te schrijven en deze als dependency te injecteren:
Figuur 3: Voorbeeld feature based extensie methode
Nadien hoef je in Program.cs alleen de volgende regels toe te voegen:
Een tweede manier om feature based modules te ontwikkelen is de Carter. Met deze Nuget package worden je modules geregistreerd middels assembly scanning om vervolgens automatisch aan je Dependency Injections te worden toegevoegd. Een “Carter” module heeft qua code een iets andere opbouw:
Figuur 4: Voorbeeld van een Carter Module
In Program.cs hoef je slechts twee regels code toe te voegen om alle modules te registreren:
Ter afronding
De introductie van minimal API’s in .Net 6 is een nieuwe manier van onze backend bouwen. Het is zeer eenvoudig. Door top-level statements en global usings wordt onze boiler-template code tot een minimum beperkt. Daartegenover staat dat onze Program.cs snel onoverzichtelijk wordt bij een groter aantal services, maar dat extensie methodes of de Carter Nuget package hiervoor een prima oplossing is.
Op het eerste gezicht lijkt de komst van minimal API's iets positiefs. Het is voor nu echter afwachten of deze trend in de toekomst de traditionele MVC backend gaat vervangen of dat de inzet hiervan interessant kan zijn bij low code technologieën, zoals het Power App platform.
Gideon Kuijpers – Software Developer
Lees ook:
- Multi-platform App UI