Asynchronicznie uzyskiwanie dostępu do zasobów internetowych

Ukończone

Wykonywanie wywołań do zasobów internetowych może spowodować długie czasy oczekiwania dla użytkownika. Aby uniknąć blokowania wątku interfejsu użytkownika, możesz uzyskać dostęp do zasobów internetowych asynchronicznie.

Zasoby sieci Web

Zasób internetowy to dowolne dane lub usługa, które są dostępne przez Internet. Obejmuje to strony internetowe, interfejsy programowania aplikacji (API), obrazy, filmy wideo i inne typy zawartości. Aplikacje pobierają zasób internetowy lub wchodzą w interakcję z nim przy użyciu standardowych protokołów sieci Web, takich jak protokół HTTP (Hypertext Transfer Protocol) lub HTTP Secure (HTTPS).

Jednym z typowych przypadków użycia uzyskiwania dostępu do zasobów internetowych jest pobranie danych z serwera zdalnego lub usługi. Może to obejmować pobieranie danych JSON lub XML, pobieranie plików lub interakcję z internetowymi interfejsami API. Na przykład możesz chcieć uzyskać dostęp do interfejsu API pogody, aby uzyskać bieżące warunki pogodowe dla określonej lokalizacji lub pobrać obraz z adresu URL.

Interfejsy API usługi Representational State Transfer (REST) to popularny sposób uzyskiwania dostępu do zasobów internetowych, ponieważ zapewniają ustandaryzowany sposób interakcji z usługami internetowymi przy użyciu metod HTTP, takich jak GET, POST, PUT i DELETE. Interfejsy API REST są powszechnie używane w programach internetowych, aplikacjach mobilnych i usługach w chmurze w celu umożliwienia wymiany danych i integracji między różnymi platformami. Interfejsy API REST zwykle zwracają dane w formacie JavaScript Object Notation (JSON), który jest lekki i łatwy do przeanalizowana.

W języku C#możesz użyć HttpClient klasy , aby wysyłać żądania HTTP do zasobów internetowych.

Używanie obiektu HttpClient na potrzeby wywołań asynchronicznego interfejsu API

Klasa HttpClient jest częścią System.Net.Http przestrzeni nazw, która udostępnia klasy do wysyłania żądań HTTP i odbierania odpowiedzi HTTP. Klasa HttpClient została zaprojektowana tak, aby była używana asynchronicznie, umożliwiając wykonywanie nieblokujących wywołań do zasobów internetowych.

Klasa HTTPClient zawiera następujące metody asynchroniczne:

  • GetAsync: wysyła żądanie GET do wskazanego URI i zwraca odpowiedź.
  • PostAsync: Wysyła żądanie typu POST do określonego identyfikatora URI z podaną zawartością i zwraca odpowiedź.
  • PutAsync: wysyła żądanie PUT z określoną zawartością do wskazanego identyfikatora URI i zwraca odpowiedź.
  • DeleteAsync: wysyła żądanie DELETE do podanego URI i zwraca odpowiedź.
  • SendAsync: wysyła komunikat żądania HTTP i zwraca odpowiedź.

W poniższym przykładzie kodu pokazano, jak za pomocą HttpClient klasy utworzyć asynchroniczne żądanie GET do interfejsu API REST i przetworzyć odpowiedź:


// 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; }
} 

W tym przykładzie HttpClient klasa służy do wysyłania asynchronicznego żądania GET do interfejsu API PetStore. Odpowiedź jest odczytywana jako ciąg i deserializowana do listy Pet obiektów przy użyciu JsonSerializer klasy . Następnie kod wykonuje iterację po liście zwierząt domowych i wyświetla ich szczegóły. Polecenie using zapewnia, że instancja HttpClient jest prawidłowo usuwana po jego użyciu, zwalniając wszystkie zasoby, które posiada.

Klasa HttpClient jest zamierzona do ponownego wykorzystania dla wielu żądań, dlatego zaleca się utworzenie pojedynczego wystąpienia HttpClient i użycie go na potrzeby całej aplikacji. Pomaga to zwiększyć wydajność i zarządzanie zasobami przez ponowne użycie bazowych połączeń sieciowych.

Podsumowanie

W tej jednostce nauczyliśmy się, jak asynchronicznie uzyskiwać dostęp do zasobów internetowych przy użyciu klasy HttpClient. Przedstawiono również sposób wykonywania asynchronicznych wywołań interfejsu API w celu pobierania danych z interfejsu API REST i przetwarzania odpowiedzi. Korzystając z technik programowania asynchronicznego, można poprawić czas odpowiedzi aplikacji i zapewnić lepsze środowisko użytkownika.

Kwestie kluczowe

  • Dostęp do zasobów internetowych można uzyskać asynchronicznie, aby uniknąć blokowania wątku interfejsu użytkownika.
  • Interfejsy API REST zapewniają ustandaryzowany sposób interakcji z usługami internetowymi.
  • Klasa HttpClient w języku C# została zaprojektowana do użycia asynchronicznego, umożliwiając nieblokujące wywołania do zasobów internetowych.
  • Klasa HttpClient zawiera metody asynchroniczne, takie jak GetAsync, PostAsync, PutAsync, DeleteAsynci SendAsync.
  • Pojedyncze wystąpienie HttpClient powinno być ponownie używane dla wielu żądań, aby poprawić wydajność i zarządzanie zasobami.