Truy nhập tài nguyên web không đồng bộ

Đã hoàn thành

Thực hiện các cuộc gọi đến tài nguyên web có thể dẫn đến thời gian chờ đợi lâu cho người dùng. Để tránh chặn luồng giao diện người dùng (UI), bạn có thể truy cập tài nguyên web không đồng bộ.

Tài nguyên web

Tài nguyên web là bất kỳ dữ liệu hoặc dịch vụ nào có thể truy cập qua internet. Điều này bao gồm các trang web, Giao diện lập trình ứng dụng (API), hình ảnh, video và các loại nội dung khác. Các ứng dụng truy xuất hoặc tương tác với tài nguyên web bằng cách sử dụng các giao thức web tiêu chuẩn như Giao thức truyền siêu văn bản (HTTP) hoặc HTTP Secure (HTTPS).

Một trường hợp sử dụng phổ biến để truy cập tài nguyên web là truy xuất dữ liệu từ máy chủ hoặc dịch vụ từ xa. Điều này có thể bao gồm tìm nạp dữ liệu JSON hoặc XML, tải xuống tệp hoặc tương tác với API web. Ví dụ: bạn có thể muốn truy cập API thời tiết để lấy điều kiện thời tiết hiện tại cho một vị trí cụ thể hoặc bạn có thể muốn tải xuống hình ảnh từ một URL.

API Chuyển trạng thái đại diện (REST) là một cách phổ biến để truy cập tài nguyên web, vì chúng cung cấp một cách tiêu chuẩn hóa để tương tác với các dịch vụ web bằng các phương thức HTTP như GET, POST, PUT và DELETE. REST API được sử dụng rộng rãi trong phát triển web, ứng dụng di động và dịch vụ đám mây để cho phép trao đổi và tích hợp dữ liệu giữa các nền tảng khác nhau. API REST thường trả về dữ liệu ở định dạng Ký hiệu đối tượng JavaScript (JSON), nhẹ và dễ phân tích cú pháp.

Trong C#, bạn có thể sử dụng lớp này HttpClient để thực hiện các yêu cầu HTTP đến tài nguyên web.

Sử dụng HttpClient cho các lệnh gọi API không đồng bộ

Lớp này HttpClient là một phần của không System.Net.Http gian tên, cung cấp các lớp để gửi yêu cầu HTTP và nhận phản hồi HTTP. Lớp này HttpClient được thiết kế để sử dụng không đồng bộ, cho phép bạn thực hiện các cuộc gọi không chặn đến tài nguyên web.

Lớp này HTTPClient bao gồm các phương thức không đồng bộ sau:

  • GetAsync: Gửi yêu cầu GET đến URI được chỉ định và trả về phản hồi.
  • PostAsync: Gửi yêu cầu POST đến URI được chỉ định với nội dung được chỉ định và trả về phản hồi.
  • PutAsync: Gửi yêu cầu PUT đến URI được chỉ định với nội dung được chỉ định và trả về phản hồi.
  • DeleteAsync: Gửi yêu cầu DELETE đến URI được chỉ định và trả về phản hồi.
  • SendAsync: Gửi thông báo yêu cầu HTTP và trả về phản hồi.

Mẫu mã sau đây minh họa cách sử dụng HttpClient lớp để thực hiện yêu cầu GET không đồng bộ đến API REST và xử lý phản hồi:


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

Trong ví dụ này, lớp được HttpClient sử dụng để gửi yêu cầu GET không đồng bộ đến API PetStore. Phản hồi được đọc dưới dạng một chuỗi và được giải tuần tự hóa thành một danh sách các Pet đối tượng bằng cách sử dụng JsonSerializer lớp. Sau đó, mã lặp lại danh sách thú cưng và hiển thị thông tin chi tiết của chúng. Câu lệnh đảm using bảo rằng HttpClient phiên bản được xử lý đúng cách sau khi sử dụng, giải phóng bất kỳ tài nguyên nào mà nó nắm giữ.

Lớp này HttpClient được thiết kế để sử dụng lại cho nhiều yêu cầu, vì vậy bạn nên tạo một phiên bản HttpClient duy nhất và sử dụng nó trong toàn bộ ứng dụng. Điều này giúp cải thiện hiệu suất và quản lý tài nguyên bằng cách sử dụng lại các kết nối mạng cơ bản.

Tóm tắt

Trong bài này, bạn đã học cách truy cập tài nguyên web không đồng bộ bằng cách sử dụng HttpClient lớp. Bạn cũng đã tìm hiểu cách thực hiện lệnh gọi API không đồng bộ để truy xuất dữ liệu từ API REST và xử lý phản hồi. Bằng cách sử dụng các kỹ thuật lập trình không đồng bộ, bạn có thể cải thiện khả năng phản hồi của các ứng dụng và cung cấp trải nghiệm người dùng tốt hơn.

Các điểm chính

  • Tài nguyên web có thể được truy cập không đồng bộ để tránh chặn luồng giao diện người dùng.
  • REST API cung cấp một cách tiêu chuẩn hóa để tương tác với các dịch vụ web.
  • Lớp HttpClient trong C# được thiết kế để sử dụng không đồng bộ, cho phép không chặn cuộc gọi đến các tài nguyên web.
  • Lớp này HttpClient bao gồm các phương thức không đồng bộ như GetAsync, , PostAsyncPutAsync, và DeleteAsyncSendAsync.
  • Một phiên bản duy nhất của nên HttpClient được sử dụng lại cho nhiều yêu cầu để cải thiện hiệu suất và quản lý tài nguyên.