Accéder de manière asynchrone aux ressources web
L’exécution d’appels à des ressources web peut entraîner des temps d’attente longs pour l’utilisateur. Pour éviter de bloquer le thread d’interface utilisateur, vous pouvez accéder de manière asynchrone aux ressources web.
Ressources Web
Une ressource web est n’importe quelle donnée ou service accessible sur Internet. Cela inclut les pages web, les interfaces de programmation d’applications (API), les images, les vidéos et d’autres types de contenu. Les applications récupèrent ou interagissent avec des ressources web à l’aide de protocoles web standard tels que HTTP (Hypertext Transfer Protocol) ou HTTP Secure (HTTPS).
Un cas d’usage courant pour accéder aux ressources web consiste à récupérer des données à partir d’un serveur ou d’un service distant. Cela peut inclure l’extraction de données JSON ou XML, le téléchargement de fichiers ou l’interaction avec les API web. Par exemple, vous pouvez accéder à une API météo pour obtenir les conditions météorologiques actuelles d’un emplacement spécifique ou télécharger une image à partir d’une URL.
Les API REST (Representational State Transfer) sont un moyen populaire d’accéder aux ressources web, car elles fournissent un moyen standardisé d’interagir avec les services web à l’aide de méthodes HTTP telles que GET, POST, PUT et DELETE. Les API REST sont largement utilisées dans le développement web, les applications mobiles et les services cloud pour permettre l’échange et l’intégration de données entre différentes plateformes. Les API REST retournent généralement des données au format JSON (JavaScript Object Notation), qui est léger et facile à analyser.
En C#, vous pouvez utiliser la HttpClient classe pour effectuer des requêtes HTTP vers des ressources web.
Utiliser HttpClient pour les appels d’API asynchrones
La HttpClient classe fait partie de l’espace System.Net.Http de noms, qui fournit des classes pour l’envoi de requêtes HTTP et la réception de réponses HTTP. La HttpClient classe est conçue pour être utilisée de manière asynchrone, ce qui vous permet d’effectuer des appels non bloquants aux ressources web.
La HTTPClient classe inclut les méthodes asynchrones suivantes :
-
GetAsync: envoie une requête GET à l’URI spécifié et retourne la réponse. -
PostAsync: envoie une requête POST à l’URI spécifié avec le contenu spécifié et retourne la réponse. -
PutAsync: envoie une requête PUT à l’URI spécifié avec le contenu spécifié et retourne la réponse. -
DeleteAsync: envoie une requête DELETE à l’URI spécifié et retourne la réponse. -
SendAsync: envoie un message de requête HTTP et retourne la réponse.
L’exemple de code suivant montre comment utiliser la HttpClient classe pour effectuer une requête GET asynchrone vers une API REST et traiter la réponse :
// Code that demonstrates the use of asynchronous REST API calls in C#
using System;
using System.ComponentModel;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
namespace ConsoleApp
{
class Program
{
static async Task Main(string[] args)
{
using (HttpClient client = new HttpClient())
{
try
{
// PetStore API endpoint
string url = "https://petstore.swagger.io/v2/pet/findByStatus?status=available";
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
//Console.WriteLine($"Response: {responseBody}");
// Deserialize the JSON response into a list of pets
var pets = JsonSerializer.Deserialize<List<Pet>>(responseBody);
// Iterate through the list of pets and display their details
foreach (var pet in pets)
{
//Console.WriteLine($"Pet ID: {pet.id}, Name: {pet.name}");
if (pet.id.ToString().Length > 4)
{
Console.WriteLine($"Pet ID: {pet.id}, Name: {pet.name}");
}
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"Request error: {e.Message}");
}
}
}
}
}
public class Pet
{
public long id { get; set; }
public string name { get; set; }
public Category category { get; set; }
public List<string> photoUrls { get; set; }
public List<Tag> tags { get; set; }
public string status { get; set; }
}
public class Category
{
public long id { get; set; }
public string name { get; set; }
}
public class Tag
{
public long id { get; set; }
public string name { get; set; }
}
Dans cet exemple, la HttpClient classe est utilisée pour envoyer une requête GET asynchrone à l’API PetStore. La réponse est lue sous la forme d'une chaîne et est désérialisée en une liste d'objets en utilisant la classe Pet. Le code effectue ensuite une itération dans la liste des animaux de compagnie et affiche leurs détails. L’instruction using garantit que l’instance HttpClient est supprimée correctement après l’utilisation, en libérant toutes les ressources qu’elle contient.
La classe HttpClient est conçue pour être réutilisée pour plusieurs requêtes, il est donc recommandé de créer une instance unique de HttpClient et de l'utiliser dans toute l'application. Cela permet d’améliorer les performances et la gestion des ressources en réutilisant les connexions réseau sous-jacentes.
Résumé
Dans cette unité, vous avez appris à accéder de manière asynchrone aux ressources web à l’aide de la HttpClient classe. Vous avez également appris à effectuer des appels d’API asynchrones pour récupérer des données à partir d’une API REST et traiter la réponse. En utilisant des techniques de programmation asynchrones, vous pouvez améliorer la réactivité de vos applications et offrir une meilleure expérience utilisateur.
Points clés
- Les ressources web sont accessibles de manière asynchrone pour éviter de bloquer le thread d’interface utilisateur.
- Les API REST offrent un moyen standardisé d’interagir avec les services web.
- La
HttpClientclasse en C# est conçue pour une utilisation asynchrone, ce qui autorise les appels non bloquants aux ressources web. - La
HttpClientclasse inclut des méthodes asynchrones telles queGetAsync, ,PostAsyncPutAsync,DeleteAsync, etSendAsync. - Une seule instance de
HttpClientdoit être réutilisée pour plusieurs requêtes afin d’améliorer les performances et la gestion des ressources.