Développement d’API
Les API sont le principal moyen dâexposer les fonctionnalitĂ©s dâun service dans lâĂ©cosystĂšme Lino.
Ce chapitre dĂ©crit comment le framework gĂ©nĂšre des Minimal APIs prĂȘtes Ă lâemploi, comment lâenregistrement automatique via Source Generators fonctionne, et quelles pratiques nous recommandons pour crĂ©er des endpoints clairs, testables et bien documentĂ©s.
Minimal APIs
Lino adopte le style Minimal API comme standard pour la gĂ©nĂ©ration dâendpoints, en privilĂ©giant :
- ClartĂ© â code concis, direct et expressif.
- Performance â rĂ©ponses optimisĂ©es, sans surcharge inutile.
Fonctionnalités intégrées
TypedResults : garantissent des rĂ©ponses fortement typĂ©es, aidant Ă la lisibilitĂ© et Ă la gĂ©nĂ©ration dâOpenAPI.
Versionnement des API : les endpoints peuvent évoluer sans rompre la compatibilité.
Documentation enrichie : des métadonnées configurables sont directement incorporées dans OpenAPI, incluant :
- WithTags â regroupe les endpoints en sections logiques dans OpenAPI.
- WithName â dĂ©finit lâoperationId de maniĂšre cohĂ©rente.
- WithSummary â dĂ©crit clairement lâobjectif de lâendpoint.
- Produces(statusCode, schema) â spĂ©cifie les codes de statut et les contrats de rĂ©ponse.
- MapToApiVersion â permet dâexposer diffĂ©rentes versions dâun mĂȘme endpoint.
Requests et Responses
Record classes sont utilisées par défaut pour les Requests et Responses :
- Elles sont immuables (réduisant les effets secondaires et les bugs).
- Elles sont concises et faciles Ă lire.
Intégration avec CQRS :
- Les Requests reçues via les endpoints sont transformées en Commands ou Queries.
- Les résultats des Commands/Queries sont convertis en Responses, favorisant la cohérence architecturale.
Exemple simplifié :
public record CreatePersonRequest(string Name, int Age);
public record CreatePersonResponse(Guid Id, string Name, int Age);
Création de nouvelles API
Créer un endpoint avec la CLI de Lino est trÚs simple :
lino new api
Lâassistant interactif vous demandera :
- Service â le service dans lequel lâAPI sera créée.
- Module â le module du service (le cas Ă©chĂ©ant).
- EntitĂ© â lâentitĂ© associĂ©e Ă lâendpoint.
- Nom de lâAPI â gĂ©nĂ©ralement alignĂ© sur le verbe de lâopĂ©ration (ex. : CreatePerson).
- Type dâopĂ©ration â POST, PUT, PATCH, DELETE ou GET.
- Route â le modĂšle de route (ex. : /people/{id}).
Exemple :
Lors de la crĂ©ation dâune API POST appelĂ©e CreatePerson associĂ©e Ă lâentitĂ© Person, la CLI gĂ©nĂšre automatiquement :
- Un endpoint avec un mapping HTTP.
- Des DTO de requĂȘte/rĂ©ponse.
- Des extensions pour lâintĂ©gration avec OpenAPI et la gestion de version.
- Un HttpClient typĂ© pour une utilisation interne par dâautres services.
Structure générée :
MyApp/
âââ src/
âââ Services/
â âââ MyService/
â âââ Presentation.API/
â âââ MyApp.MyService.Presentation.API.csproj
â âââ Endpoints/
â âââ People/
â âââ CreatePerson/
â âââ CreatePersonEndpoint.cs
â âââ CreatePersonExtensions.cs
â âââ CreatePersonRequest.cs
â âââ CreatePersonResponse.cs
âââ Integrations/
âââ MyService/
âââ Http/
âââ Contracts/
â âââ Apis/
â âââ People/
â âââ IPersonHttpClient.cs
â âââ CreatePerson/
â âââ CreatePersonRequest.cs
â âââ CreatePersonResponse.cs
âââ Clients/
âââ Apis/
âââ PersonHttpClient.cs
Enregistrement des Endpoints avec Source Generators
Lino supprime le besoin de mapper manuellement les endpoints ou dâutiliser intensivement Reflection Ă lâexĂ©cution.
Ă la place, il utilise les Source Generators pour gĂ©nĂ©rer automatiquement le code dâenregistrement lors de la compilation.
Comment ça fonctionne
Pour chaque endpoint créé, le générateur produit des classes/parties de classes qui appellent :
MapGet, MapPost, MapPut, MapDelete, etc.
Cela remplace la nĂ©cessitĂ© dâajouter manuellement tous les mappages dans Program.cs.
Avantages :
- Enregistrement Ă la compilation â Ă©vite les erreurs Ă lâexĂ©cution.
- Program.cs Ă©purĂ© â surface de configuration manuelle rĂ©duite.
- CompatibilitĂ© AOT â Ă©limine la dĂ©pendance Ă Reflection.
- Documentation intĂ©grĂ©e â les mĂ©tadonnĂ©es (tags, summary, produces) sont gĂ©nĂ©rĂ©es avec le mappage.
Ce modÚle garantit que les API créées dans Lino sont :
- Auto-documentées
- Performantes
- Conformes Ă lâarchitecture CQRS du framework
