Доступ к веб-ресурсам асинхронно
Выполнение вызовов к веб-ресурсам может привести к длительному времени ожидания пользователя. Чтобы избежать блокировки потока пользовательского интерфейса, вы можете асинхронно получить доступ к веб-ресурсам.
Веб-ресурсы
Веб-ресурс — это любые данные или службы, доступные через Интернет. К ним относятся веб-страницы, интерфейсы программирования приложений (API), изображения, видео и другие типы содержимого. Приложения получают или взаимодействуют с веб-ресурсом с помощью стандартных веб-протоколов, таких как протокол HTTP или HTTP Secure (HTTPS).
Одним из распространенных вариантов использования для доступа к веб-ресурсам является получение данных с удаленного сервера или службы. Это может включать получение данных JSON или XML, скачивание файлов или взаимодействие с веб-API. Например, вы можете получить доступ к API погоды, чтобы получить текущие погодные условия для определенного расположения или скачать изображение из URL-адреса.
API передачи представления состояния (REST) являются популярным способом доступа к веб-ресурсам, так как они предоставляют стандартный способ взаимодействия с веб-службами с помощью таких методов HTTP, как GET, POST, PUT и DELETE. REST API широко используются в веб-разработке, мобильных приложениях и облачных службах для обеспечения обмена данными и интеграции между разными платформами. Интерфейсы REST API обычно возвращают данные в формате JavaScript Object Notation (JSON), который легковесный и легко обрабатываемый.
В C#класс можно использовать HttpClient для отправки HTTP-запросов к веб-ресурсам.
Использование HttpClient для асинхронных вызовов API
Класс HttpClient является частью System.Net.Http пространства имен, которое предоставляет классы для отправки HTTP-запросов и получения HTTP-ответов. Класс HttpClient предназначен для асинхронного использования, что позволяет выполнять неблокировочные вызовы к веб-ресурсам.
Класс HTTPClient включает следующие асинхронные методы:
-
GetAsync: отправляет запрос GET в указанный универсальный код ресурса (URI) и возвращает ответ. -
PostAsync: отправляет запрос POST в указанный универсальный код ресурса (URI) с указанным содержимым и возвращает ответ. -
PutAsync: отправляет запрос PUT в указанный универсальный код ресурса (URI) с указанным содержимым и возвращает ответ. -
DeleteAsync: отправляет запрос DELETE на указанный URI и возвращает ответ. -
SendAsync: отправляет сообщение HTTP-запроса и возвращает ответ.
В следующем примере кода показано, как использовать HttpClient класс для выполнения асинхронного запроса GET к REST API и обработки ответа:
// 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; }
}
В этом примере HttpClient класс используется для отправки асинхронного запроса GET в API PetStore. Ответ считывается как строка и десериализируется в список Pet объектов с помощью JsonSerializer класса. Затем код выполняет итерацию по списку домашних животных и отображает их сведения. Инструкция using гарантирует, что HttpClient экземпляр удаляется должным образом после использования, освобождая все ресурсы, которые он содержит.
Класс HttpClient предназначен для повторного использования для нескольких HttpClient запросов, поэтому рекомендуется создать один экземпляр и использовать его во всем приложении. Это помогает повысить производительность и управление ресурсами путем повторного использования базовых сетевых подключений.
Сводка
В этом уроке вы узнали, как асинхронно получить доступ к веб-ресурсам с помощью HttpClient класса. Вы также узнали, как выполнять асинхронные вызовы API для получения данных из REST API и обработки ответа. Используя асинхронные методы программирования, вы можете повысить скорость реагирования приложений и улучшить взаимодействие с пользователем.
Ключевые моменты
- Доступ к веб-ресурсам можно получить асинхронно, чтобы избежать блокировки потока пользовательского интерфейса.
- REST API предоставляет стандартный способ взаимодействия с веб-службами.
- Класс
HttpClientв C# предназначен для асинхронного использования, что позволяет неблокировать вызовы веб-ресурсов. - Класс
HttpClientвключает асинхронные методы, такие какGetAsync,PostAsync,PutAsyncиDeleteAsyncSendAsync. - Для улучшения производительности и управления ресурсами следует повторно использовать один и тот же экземпляр
HttpClientдля нескольких запросов.