Asynchronní přístup k webovým prostředkům
Volání webových prostředků může vést k dlouhé čekací době pro uživatele. Abyste se vyhnuli blokování vlákna uživatelského rozhraní, můžete k webovým prostředkům přistupovat asynchronně.
Webové prostředky
Webový prostředek je jakákoli data nebo služba, která jsou přístupná přes internet. To zahrnuje webové stránky, aplikační programovací rozhraní (API), obrázky, videa a další typy obsahu. Aplikace načítají webový prostředek nebo s nimi komunikují pomocí standardních webových protokolů, jako je http (Hypertext Transfer Protocol) nebo HTTP Secure (HTTPS).
Jedním z běžných případů použití pro přístup k webovým prostředkům je načtení dat ze vzdáleného serveru nebo služby. Může to zahrnovat načítání dat JSON nebo XML, stahování souborů nebo interakci s webovými rozhraními API. Například můžete chtít získat přístup k rozhraní API pro počasí, abyste získali aktuální povětrnostní podmínky pro konkrétní umístění, nebo si můžete stáhnout obrázek z adresy URL.
Rozhraní REST (Representational State Transfer) API představují oblíbený způsob přístupu k webovým prostředkům, protože poskytují standardizovaný způsob interakce s webovými službami pomocí metod HTTP, jako je GET, POST, PUT a DELETE. Rozhraní REST API se široce používají při vývoji webů, mobilních aplikacích a cloudových službách k umožnění výměny dat a integrace mezi různými platformami. Rozhraní REST API obvykle vrací data ve formátu JSON (JavaScript Object Notation), který je jednoduchý a snadno parsovatelný.
V jazyce C# můžete pomocí HttpClient třídy provádět požadavky HTTP na webové prostředky.
Použití HttpClient pro asynchronní volání rozhraní API
Třída HttpClient je součástí System.Net.Http oboru názvů, který poskytuje třídy pro odesílání požadavků HTTP a příjem odpovědí HTTP. Třída HttpClient je navržená tak, aby se používala asynchronně, takže můžete provádět neblokující volání webových prostředků.
Třída HTTPClient obsahuje následující asynchronní metody:
-
GetAsync: Odešle požadavek GET na zadaný identifikátor URI a vrátí odpověď. -
PostAsync: Odešle požadavek POST na zadaný identifikátor URI se zadaným obsahem a vrátí odpověď. -
PutAsync: Odešle požadavek PUT na zadaný identifikátor URI se zadaným obsahem a vrátí odpověď. -
DeleteAsync: Odešle požadavek DELETE na zadaný identifikátor URI a vrátí odpověď. -
SendAsync: Odešle zprávu požadavku HTTP a vrátí odpověď.
Následující ukázka kódu ukazuje, jak pomocí HttpClient třídy vytvořit asynchronní požadavek GET na rozhraní REST API a zpracovat odpověď:
// 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; }
}
V tomto příkladu se HttpClient třída používá k odeslání asynchronního požadavku GET do rozhraní API PetStore. Odpověď se přečte jako řetězec a deserializuje do seznamu Pet objektů pomocí JsonSerializer třídy. Kód pak iteruje seznam domácích zvířat a zobrazí jejich podrobnosti. Příkaz using zajistí, že HttpClient instance bude po použití správně odstraněna a uvolní všechny prostředky, které obsahuje.
Třída HttpClient je navržená tak, aby se znovu používala pro více požadavků, takže se doporučuje vytvořit jednu instanci HttpClient a použít ji v celé aplikaci. To pomáhá zlepšit výkon a správu prostředků opětovným použitím základních síťových připojení.
Shrnutí
V této lekci jste zjistili, jak asynchronně přistupovat k webovým prostředkům pomocí HttpClient třídy. Dozvěděli jste se také, jak provádět asynchronní volání rozhraní API pro načtení dat z rozhraní REST API a zpracování odpovědi. Pomocí asynchronních programovacích technik můžete zlepšit rychlost odezvy aplikací a poskytnout lepší uživatelské prostředí.
Klíčové body
- K webovým prostředkům je možné přistupovat asynchronně, aby se zabránilo blokování vlákna uživatelského rozhraní.
- Rozhraní REST API poskytují standardizovaný způsob interakce s webovými službami.
- Třída
HttpClientv jazyce C# je navržená pro asynchronní použití, což umožňuje odblokovat volání webových prostředků. - Třída
HttpClientobsahuje asynchronní metody jakoGetAsync, ,PostAsyncPutAsync,DeleteAsync, aSendAsync. - Jedna instance
HttpClientby se měla opakovaně používat pro více požadavků, aby se zvýšil výkon a zefektivnila správa prostředků.