웹 리소스에 비동기적으로 액세스
웹 리소스를 호출하면 사용자가 대기 시간이 길어질 수 있습니다. UI(사용자 인터페이스) 스레드를 차단하지 않도록 웹 리소스에 비동기적으로 액세스할 수 있습니다.
웹 리소스
웹 리소스는 인터넷을 통해 액세스할 수 있는 모든 데이터 또는 서비스입니다. 여기에는 웹 페이지, API(애플리케이션 프로그래밍 인터페이스), 이미지, 비디오 및 기타 유형의 콘텐츠가 포함됩니다. 애플리케이션은 HTTP(Hypertext Transfer Protocol) 또는 HTTPS(HTTP Secure)와 같은 표준 웹 프로토콜을 사용하여 웹 리소스를 검색하거나 상호 작용합니다.
웹 리소스에 액세스하는 일반적인 사용 사례 중 하나는 원격 서버 또는 서비스에서 데이터를 검색하는 것입니다. 여기에는 JSON 또는 XML 데이터 가져오기, 파일 다운로드 또는 웹 API와의 상호 작용이 포함될 수 있습니다. 예를 들어 날씨 API에 액세스하여 특정 위치에 대한 현재 기상 조건을 가져올 수도 있고 URL에서 이미지를 다운로드할 수도 있습니다.
REST(표현 상태 전송) API는 GET, POST, PUT 및 DELETE와 같은 HTTP 메서드를 사용하여 웹 서비스와 상호 작용하는 표준화된 방법을 제공하므로 웹 리소스에 액세스하는 인기 있는 방법입니다. REST API는 웹 개발, 모바일 애플리케이션 및 클라우드 서비스에서 널리 사용되어 서로 다른 플랫폼 간의 데이터 교환 및 통합을 가능하게 합니다. REST API는 일반적으로 가볍고 구문 분석하기 쉬운 JSON(JavaScript Object Notation) 형식으로 데이터를 반환합니다.
C#에서 클래스를 HttpClient 사용하여 웹 리소스에 대한 HTTP 요청을 수행할 수 있습니다.
비동기 API 호출에 HttpClient 사용
클래스는 HttpClient HTTP 요청을 보내고 HTTP 응답을 수신하기 위한 클래스를 제공하는 네임스페이스의 일부입니다 System.Net.Http . 클래스 HttpClient 는 비동기적으로 사용하도록 설계되어 웹 리소스에 대한 차단 해제 호출을 수행할 수 있습니다.
클래스에는 HTTPClient 다음과 같은 비동기 메서드가 포함됩니다.
-
GetAsync: 지정된 URI에 GET 요청을 보내고 응답을 반환합니다. -
PostAsync: 지정된 콘텐츠를 사용하여 지정된 URI에 POST 요청을 보내고 응답을 반환합니다. -
PutAsync: 지정된 콘텐츠를 사용하여 지정된 URI에 PUT 요청을 보내고 응답을 반환합니다. -
DeleteAsync: 지정된 URI에 DELETE 요청을 보내고 응답을 반환합니다. -
SendAsync: HTTP 요청 메시지를 보내고 응답을 반환합니다.
다음 코드 샘플에서는 클래스를 사용하여 HttpClient REST API에 대한 비동기 GET 요청을 수행하고 응답을 처리하는 방법을 보여 줍니다.
// 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 에서 클래스는 PetStore API에 비동기 GET 요청을 보내는 데 사용됩니다. 응답은 문자열로 읽고 Pet 클래스를 사용하여 JsonSerializer 개체 목록으로 역직렬화됩니다. 그런 다음 코드는 애완 동물 목록을 반복하고 세부 정보를 표시합니다. 이 문장은 using 인스턴스가 사용 후 적절하게 처리되어 HttpClient가 보유하는 모든 리소스를 해제시키도록 합니다.
클래스 HttpClient 는 여러 요청에 다시 사용하도록 설계되었으므로 애플리케이션 전체에서 HttpClient 단일 인스턴스를 만들고 사용하는 것이 좋습니다. 이렇게 하면 기본 네트워크 연결을 다시 사용하여 성능 및 리소스 관리를 향상시킬 수 있습니다.
요약
이 단원에서는 클래스를 사용하여 웹 리소스에 비동기적으로 액세스하는 HttpClient 방법을 알아보았습니다. 또한 비동기 API 호출을 수행하여 REST API에서 데이터를 검색하고 응답을 처리하는 방법을 알아보았습니다. 비동기 프로그래밍 기술을 사용하여 애플리케이션의 응답성을 향상시키고 더 나은 사용자 환경을 제공할 수 있습니다.
핵심 사항
- 웹 리소스는 UI 스레드를 차단하지 않도록 비동기적으로 액세스할 수 있습니다.
- REST API는 웹 서비스와 상호 작용하는 표준화된 방법을 제공합니다.
-
HttpClientC#의 클래스는 비동기 사용을 위해 설계되어 웹 리소스에 대한 비동기 호출을 허용합니다. -
HttpClient클래스에는GetAsync,PostAsync,PutAsync,DeleteAsync,SendAsync같은 비동기 메서드가 포함됩니다. - 성능 및 리소스 관리를 개선하기 위해 여러 요청에 단일 인스턴스
HttpClient를 다시 사용해야 합니다.