웹 리소스에 비동기적으로 액세스

완료됨

웹 리소스를 호출하면 사용자가 대기 시간이 길어질 수 있습니다. 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는 웹 서비스와 상호 작용하는 표준화된 방법을 제공합니다.
  • HttpClient C#의 클래스는 비동기 사용을 위해 설계되어 웹 리소스에 대한 비동기 호출을 허용합니다.
  • HttpClient 클래스에는 GetAsync, PostAsync, PutAsync, DeleteAsync, SendAsync 같은 비동기 메서드가 포함됩니다.
  • 성능 및 리소스 관리를 개선하기 위해 여러 요청에 단일 인스턴스 HttpClient 를 다시 사용해야 합니다.