Exercice - Exécuter l’application
Dans l’exercice précédent, vous avez écrit du code pour l’API de votre équipe afin d’implémenter des opérations de base de données. Dans cet exercice, vous allez tester l’API qui est désormais connectée à la base de données.
Exécuter l’API
Dans le volet du terminal, exécutez l’application :
dotnet run
Inspectez la sortie générée par l’exécution de l’application et notez les informations suivantes :
- EF Core répercute les commandes SQL en tant qu’événements de journal
info
au fur et à mesure de leur exécution. - Si la base de données n’existe pas encore, les tables et les index sont définis à l’aide de commandes SQL
CREATE
. - Si la base de données n’a pas encore été amorcée, des commandes
INSERT
sont exécutées pour ajouter les données seed. - Pour la sécurité, les valeurs des paramètres ne sont pas répercutées sur la console. Vous pouvez modifier ce paramètre en utilisant EnableSensitiveDataLogging.
- EF Core répercute les commandes SQL en tant qu’événements de journal
Utilisez SQLite Explorer pour explorer la base de données amorcée. Chaque table contient des données.
Accéder à Swagger
Maintenant que l’API est en cours d’exécution, testez-la pour voir si les opérations fonctionnent comme prévu. L’API est configurée pour utiliser Swagger qui fournira l’interface utilisateur de test. Swagger est un outil qui permet de concevoir, générer, documenter et consommer des services web RESTful.
Dans la sortie qui s’affiche après l’exécution de l’application, recherchez l’URL HTTP où l’application écoute. La sortie doit ressembler à celle-ci :
info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5200
Pour ouvrir l’URL, sélectionnez-la tout en maintenant la touche Ctrl enfoncée. Le navigateur s’ouvre à l’emplacement
/
de l’API, qui retourne le texteContoso Pizza management API. Go to /swagger to open the Swagger test UI.
Dans la barre d’adresse du navigateur, ajoutez
/swagger
à la fin de l’URL et sélectionnez Entrée.
Tester les opérations CRUD
Dans les étapes suivantes, vous allez utiliser l’interface utilisateur Swagger pour tester chacune des opérations de l’API de la même façon qu’une application cliente. Après chaque opération, inspectez la base de données dans SQLite Explorer pour voir les modifications à mesure qu’elles se produisent.
Demandez la liste complète de pizzas :
- Sous l’en-tête Pizza, développez l’opération GET /Pizza et sélectionnez Try it out.
- Sélectionnez le bouton Exécuter.
L’API retourne la liste des pizzas au format JSON (sous Response body).
[ { "id": 1, "name": "Meat Lovers", "sauce": null, "toppings": null }, { "id": 2, "name": "Hawaiian", "sauce": null, "toppings": null }, { "id": 3, "name": "Alfredo Chicken", "sauce": null, "toppings": null } ]
Conseil
Pourquoi les propriétés
sauce
ettoppings
sont-elles nulles ? Ce résultat est attendu, car dans la méthodePizzaService.GetAll
, vous n’avez pas utilisé la méthode d’extensionInclude
pour spécifier le chargement des propriétés de navigation.Demandez une seule pizza :
- Faites défiler l’écran vers le bas jusqu’à l’opération GET /Pizza{id} et développez-la. Ensuite, sélectionnez Try it out.
- Dans le champ id, entrez
2
et sélectionnez Execute.
L’API retourne la pizza « Hawaïenne ». Notez que les propriétés
sauce
ettoppings
sont remplies, car la méthodePizzaService.GetById
utilise la méthode d’extensionInclude
.Ajoutez une nouvelle pizza :
Faites défiler l’écran vers le haut jusqu’à l’opération POST /Pizza (située entre les opérations GET que vous venez d’utiliser) et développez-la. Ensuite, sélectionnez Try it out.
Dans la zone de texte Request body, collez le code JSON suivant :
{ "name": "BBQ Beef", "sauce": { "name": "BBQ", "isVegan": false }, "toppings": [ { "name": "Smoked Beef Brisket", "calories": 250 } ] }
Sélectionnez Exécuter.
L’API retourne la nouvelle pizza avec la propriété
id
renseignée.Ajoutez une autre garniture à la pizza BBQ Beef :
- Faites défiler l’écran vers le bas jusqu’à l’opération PUT /Pizza{id}/addtopping et développez-la. Sélectionnez Essayer.
- Dans le champ id, entrez 4.
- Dans le champ toppingId, entrez 5.
- Sélectionnez Exécuter.
L’API met à jour la pizza et retourne un code de réussite. Dans la base de données, un enregistrement est ajouté à
PizzaTopping
pour associer la pizza à la garniture.Changez de sauce de la pizza BBQ Beef :
- Faites défiler l’écran vers le bas jusqu’à l’opération PUT /Pizza{id}/updatesauce et développez-la. Sélectionnez Essayer.
- Dans le champ id, entrez 4.
- Dans le champ sauceId, entrez 2.
- Sélectionnez Exécuter.
L’API met à jour la pizza et retourne un code de réussite. Dans la base de données, l’enregistrement
Pizza
est mis à jour pour associer la pizza à la nouvelle sauce.Revenez à l’opération GET /Pizza{id} et demandez la pizza BBQ Beef en définissant le champ id sur 4. Sélectionnez ensuite Execute. Notez que les propriétés
sauce
ettoppings
sont renseignées.{ "id": 4, "name": "BBQ Beef", "sauce": { "id": 2, "name": "Alfredo", "isVegan": false }, "toppings": [ { "id": 5, "name": "Pineapple", "calories": 75 }, { "id": 6, "name": "Smoked Beef Brisket", "calories": 250 } ] }
Vous réalisez qu’une pizza garnie de poitrine fumée, de sauce Alfredo et d’ananas est une très mauvaise idée.
Supprimez la pizza :
- Recherchez l’opération DELETE /Pizza{id} et développez-la. Sélectionnez Essayer.
- Dans le champ id, entrez 4.
- Sélectionnez Exécuter.
L’API supprime la pizza et retourne un code de réussite. Dans la base de données, l’enregistrement
Pizza
et les enregistrements associés dansPizzaTopping
sont supprimés.Dans le terminal avec l’application en cours d’exécution, sélectionnez Ctrl+C pour arrêter l’application en cours d’exécution.
Conseil
Vous pouvez faire des tests avec l’application. Chaque fois que vous souhaitez démarrer avec une nouvelle base de données, arrêtez l’application et supprimez les fichiers ContosoPizza.db, .db-shm et .db-wal. Ensuite, relancez l’application.
Beau travail ! L’application fonctionne avec votre base de données comme prévu ! Dans l’unité suivante, vous allez générer automatiquement des modèles d’entité à partir d’une base de données existante.