Ce support de cours est destiné aux étudiants universitaires souhaitant maîtriser le développement d'applications modernes avec l'écosystème .NET. Il propose une introduction pédagogique aux technologies ASP.NET, en mettant l'accent sur les évolutions majeures de .NET Core. Le document détaille les environnements de développement ainsi que les bonnes pratiques architecturales.
Il couvre principalement les notions suivantes :
- L'architecture modulaire et multiplateforme de .NET Core ;
- La gestion des données via Entity Framework Core ;
- L'implémentation de l'injection de dépendances et de l'inversion de contrôle ;
- La création de services RESTful avec ASP.NET Web API.
Introduction à ASP.NET Core
Le Framework .NET est historiquement lié à Windows depuis ses débuts en 2002. Les applications .NET comptaient sur la présence du Framework dans le système d'exploitation, et Microsoft procédait à sa mise à jour via Windows Update. Cela signifiait que toutes les applications partageaient la même version du Framework et ne pouvaient être exécutées que sur Windows. Pour résoudre ces limitations, Microsoft a créé .NET Core.
Qu'est-ce que .NET Core ?
.NET Core est une implémentation open source, modulaire et multiplateforme du framework .NET. Il est conçu pour écrire du code performant, notamment pour les charges de travail optimisées pour le cloud. Il se compose de deux parties complémentaires :
- CoreFx : L'implémentation concrète de .NET Core sous forme de plusieurs bibliothèques (DLL) comme les collections, le système de fichiers, la console ou SqlClient.
- CoreCLR : Le moteur d'exécution qui gère notamment le ramasse-miettes (Garbage Collector) et le compilateur JIT.
Caractéristiques principales de .NET Core
Multiplateforme et Open Source
.NET Core est supporté par plusieurs systèmes d'exploitation tels que Linux et macOS. Les sources de CoreFx et CoreCLR sont disponibles sur GitHub, permettant à chacun de contribuer ou de compiler le framework lui-même.
Architecture Modulaire
Contrairement au Framework .NET classique qui nécessite l'installation de l'ensemble du package, .NET Core est modulaire. On ajoute au projet uniquement les dépendances nécessaires via NuGet. Chaque application peut vivre avec ses propres versions de bibliothèques, supprimant les dépendances globales entre applications.
Rapidité et Performance
.NET Core offre une exécution plus rapide. Son architecture est basée sur les dossiers (folder-based) plutôt que strictement sur les fichiers de projet, ce qui signifie que les changements dans le dossier sont directement reflétés dans Visual Studio.
Déploiement et Serveur Web
Le serveur Kestrel
Pour l'exécution des applications, Microsoft fournit Kestrel, un serveur web multiplateforme intégré par défaut. Il est lancé avec l'environnement d'exécution et peut fonctionner seul ou avec un serveur proxy inverse comme IIS, Apache ou Nginx. Un serveur proxy inverse reçoit les requêtes HTTP d'Internet et les transmet à Kestrel après un traitement préliminaire.
Utilisation avec Docker et DevOps
.NET Core offre la possibilité de déployer des applications sous Docker. Cela permet d'automatiser le déploiement dans des conteneurs logiciels et de réduire les coûts de licence. Cette approche s'intègre parfaitement dans une philosophie DevOps, favorisant la collaboration entre les équipes de développement et les équipes opérationnelles.
Entity Framework Core
Pour utiliser Entity Framework dans les projets .NET Core, il est nécessaire d'installer les paquets spécifiques via NuGet, tels que Microsoft.EntityFrameworkCore et Microsoft.EntityFrameworkCore.SqlServer.
Approche Code First
L'approche Code First consiste à créer une classe pour définir la structure de la table, puis à générer un contrôleur MVC avec vues utilisant Entity Framework. La base de données est ensuite générée via les commandes suivantes :
- Add-Migration : Crée un dossier contenant le code représentant le schéma de la base de données.
- Update-Database : Applique le code pour mettre à jour ou créer la base de données réelle.
Approche Database First
Cette approche permet de créer le modèle à partir d'une base de données existante. On utilise la console NuGet avec la commande Scaffold-DbContext pour générer les classes de modèles et le contexte de données.
Inversion de Contrôle et Injection de Dépendances
L'Inversion de Contrôle (IoC) est un modèle de conception visant à réduire le couplage entre les classes. L'injection de dépendances est une implémentation de ce modèle, où les objets sont injectés dans les traitements par un service externe.
Modes d'instanciation des services
- AddSingleton : Crée une instance unique pour toute l'application. Elle est réutilisée pour tous les appels.
- AddTransient : Crée une nouvelle instance à chaque fois que l'objet est demandé.
- AddScoped : Crée une instance unique par requête HTTP. La même instance est utilisée pour tous les appels au sein d'une même requête web.
ASP.NET Web API
Une API (Interface de Programmation d'Application) est un ensemble de services accessibles via le protocole HTTP. ASP.NET Web API facilite la création de services RESTful atteignant divers clients, des navigateurs aux appareils mobiles.
Verbes HTTP et Méthodes
Le protocole HTTP définit des verbes pour indiquer l'action à réaliser sur une ressource :
- GET : Utilisé pour récupérer des données (équivalent à un SELECT).
- POST : Utilisé pour envoyer une entité vers une ressource (équivalent à un CREATE).
- PUT : Remplace les représentations de la ressource visée (équivalent à un UPDATE).
- DELETE : Supprime la ressource indiquée.
Liaison des paramètres (Parameter Binding)
Web API lie les paramètres des actions soit via la QueryString de l'URL pour les types primitifs, soit via le corps de la requête (BodyRequest) pour les types complexes. Les attributs [FromUri] et [FromBody] permettent de modifier ce comportement par défaut.
FAQ
Pourquoi choisir .NET Core plutôt que .NET Framework ?
.NET Core est préférable pour le développement multiplateforme (Linux, macOS), l'utilisation de conteneurs Docker et pour bénéficier de meilleures performances et d'une architecture modulaire plus légère.
Quel est le rôle du fichier startup.cs ?
Le fichier startup.cs est la classe de démarrage de l'application. Il contient la configuration des services via l'injection de dépendances et définit le pipeline de traitement des requêtes HTTP.
Qu'est-ce que RESTful dans le contexte des Web API ?
RESTful désigne un style d'architecture réseau qui repose sur le protocole HTTP. Il utilise des URI uniques pour accéder aux ressources et les verbes HTTP standards pour manipuler les données de manière simple et légère, souvent au format JSON.