C#: Consommer une API REST avec WebClient
Durant cette quête tu apprendras à te servir de la classe WebClient pour requêter des API
Objectifs
-
Savoir émettre une requête à une API avec WebClient
-
Interpréter les données retournées par l'API
Différentes méthodes
Une multitude de classes présentes de base dans le framework .NET permettent d'effectuer des requêtes HTTP. Voici une liste de quelques classes permettant de requêter le Web:
-
System.Net.Http- Un espace de noms fournissant des classes complexes à manipuler mais qui permettent si elles sont bien utilisées d'avoir un contrôle absolu sur le flux de données -
HttpWebRequest- Une classe à ne plus utiliser dans les nouveaux développements au profit deSystem.Net.Http.HttpClientmais qu'on peut retrouver sur du code legacy -
WebClient- Une classe très simple à manipuler qui abstrait beaucoup de détails pour le développeur
Toutes ces espaces de noms/bibliothèques permettent de mettre en place de la programmation réactive.
La programmation réactive est un paradigme de programmation qui tient compte du fait que l'action est asynchrone, à savoir non-bloquante.
Lors d'un long processus (par exemple : charger et afficher la liste de tous les utilisateurs d'un site), on peut comparer deux paradigmes :
-
la programmation impérative: le programme va attendre la fin de la tâche avant de poursuivre son exécution
-
la programmation réactive: le programme va poursuivre son exécution (il sera donc possible d'effectuer d'autres actions) et il sera prévenu de la fin de la tâche (ou de l'avancée, voire de son échec).
WebClient
La classe la plus simple et intuitive à utiliser pour exécuter des requêtes HTTP est WebClient. Tu t'en doutes, durant cette quête nous allons utiliser WebClient afin d'apprendre à exécuter des requêtes HTTP par programmation.
La classe WebClient est disponible par défaut dans les versions actuelles du framework .NET. Cette classe appartient à l'espace de noms System.Net.
Voici un exemple d'utilisation de WebClient qui va récupérer une réponse HTTP en seulement deux lignes de code, la classe non (sans jeux de mots ;) )?:
using System;
using System.Net;
namespace HttpRequestsTest
{
public static void Main()
{
WebClient client = new WebClient();
String response = client.DownloadString("http://google.com");
Console.WriteLine(response);
}
}
Le code ci-dessus est excessivement simple:
-
On instancie la classe
WebClient -
On utilise la méthode
DownloadStringde la classeWebClientqui va télécharger la page et retourner sa totalité en chaîne de caractères -
On affiche la réponse à l'écran
Documentation officielle de la classe WebClient qui utilise des flux pour retourner le résultat
Cas concret d'utilisation de WebClient dans une application
Challenge
Star Wars API
L'API suivante permet de récupérer des informations sur la saga Star Wars: https://swapi.dev/.
A partir de cette API, il va falloir que tu conçoives un formulaire en ASP.NET qui permet d'effectuer une recherche de planètes par _identifiant numérique _sur l'API.
Critères de validation
-
Une application Asp.Net MVC qui récupère des informations sur une planète identifiée par son identifiant numérique (exemple https://swapi.dev/api/planets/1)
-
Un tableau HTML affiche toutes les informations reçues sur la planète
-
Les données proviennent de la plateforme https://swapi.dev/