Aller au contenu
learn

14. Minimal APIs et contrôleurs

Les Minimal APIs et les contrôleurs publient tous des endpoints via endpoint routing. Le choix dépend des besoins de composition, pas d’un slogan.

Un handler lie directement route, query, headers, services et body. Il faut rendre la source explicite dès qu’une ambiguïté devient dangereuse.

without key: 400; with key: 200 {"root":"C","notes":7}

TypedResults conserve des types concrets pour tests et OpenAPI. Un endpoint filter peut décorer une famille de handlers ; l’autorisation reste la responsabilité du système d’autorisation et des métadonnées d’endpoint.

Les contrôleurs apportent conventions, model binding, filtres et validation pour les grandes APIs. Le programme mappe les deux styles dans la même table :

controller: 200 {"symbol":"Cmaj7","characters":5}

Ne pas dupliquer la policy : chaque transport appelle la même seam applicative.

IAsyncEnumerable<T> permet au serializer de consommer les éléments de façon asynchrone. Les proxies peuvent néanmoins bufferiser ; pour une livraison progressive, mesurer toute la chaîne et choisir NDJSON, SSE ou SignalR selon le contrat.

Fenêtre de terminal
dotnet run --project code/csharp-advanced/Advanced -c Release -- l14

La sortie vérifiée est expected/l14.txt.

  1. Ajouter une valeur notes négative et un contrat d’erreur portable.
  2. Exposer la même opération par Minimal API et contrôleur sans dupliquer la policy.
  3. Annuler le stream après le premier élément et prouver que la source observe la cancellation.
Solutions
  1. Rejeter à la frontière avec un problem details stable et tester statut, media type et payload.
  2. Lier les entrées vers une commande/requête unique, appeler un seul handler, puis mapper le résultat dans chaque adapter.
  3. Passer RequestAborted, fermer la réponse côté client et vérifier le finally ou la sonde de cancellation.