کار با REST APIها
کار با REST APIها در سیشارپ بخش حیاتی توسعه نرمافزارهای مدرن است که نیاز به تعامل با سرویسهای خارجی، ارسال و دریافت دادهها و ساخت سیستمهای مقیاسپذیر دارد. REST (Representational State Transfer) یک سبک معماری است که ارتباط بین کلاینت و سرور را از طریق پروتکل HTTP امکانپذیر میکند و از متدهایی مانند GET، POST، PUT و DELETE استفاده میکند. تسلط بر کار با REST APIها در سیشارپ برای توسعهدهندگانی که میخواهند سرویسهای وب، میکروسرویسها و سیستمهای مبتنی بر داده را مدیریت کنند، ضروری است.
در سیشارپ، مصرف REST APIها معمولاً با استفاده از کلاس HttpClient از فضای نام System.Net.Http انجام میشود. این کلاس متدهای غیرهمزمان برای ارسال درخواستها و پردازش پاسخها ارائه میدهد. برنامهنویسان باید مفاهیم پیشرفته سیشارپ مانند برنامهنویسی غیرهمزمان با async/await، مدیریت دادهها با ساختارهایی مانند List و Dictionary، سریالسازی و دسیریالسازی JSON و اصول شیءگرایی را بهخوبی درک کنند.
در این آموزش، خواننده میآموزد چگونه برنامههایی بسازد که بتوانند به REST APIها دسترسی پیدا کنند، دادهها را پردازش کنند و با رعایت بهترین شیوههای توسعه، برنامههایی امن، کارآمد و قابل مقیاس تولید نمایند.
مثال پایه
textusing System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Text.Json;
namespace RestApiDemo
{
public class Program
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main(string[] args)
{
try
{
string url = "https://jsonplaceholder.typicode.com/posts";
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
List<Post> posts = JsonSerializer.Deserialize<List<Post>>(responseBody);
foreach (var post in posts)
{
Console.WriteLine($"Post ID: {post.Id}, Title: {post.Title}");
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"خطا در درخواست: {e.Message}");
}
}
}
public class Post
{
public int UserId { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
}
در مثال بالا، یک HttpClient ایجاد شد تا درخواست GET به یک REST API ارسال کند. متد GetAsync درخواست را به صورت غیرهمزمان ارسال میکند و EnsureSuccessStatusCode اطمینان میدهد که پاسخ موفق بوده است. محتوای JSON دریافتی با استفاده از JsonSerializer به لیستی از شیءهای Post دسیریالسازی میشود تا دادهها به صورت تایپشده قابل پردازش باشند. حلقه foreach دادههای هر پست را نمایش میدهد و ساختار try/catch خطاهای HTTP را مدیریت میکند.
این مثال نشان میدهد که چگونه اصول شیءگرایی، ساختارهای داده و برنامهنویسی غیرهمزمان در سیشارپ به کار گرفته میشوند و بهترین شیوهها در مدیریت خطاها و منابع رعایت میشوند.
مثال کاربردی
textusing System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Text.Json;
namespace AdvancedRestApiDemo
{
public class Program
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main(string[] args)
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
var newPost = new Post
{
UserId = 1,
Title = "مثال پیشرفته سیشارپ",
Body = "نمایش درخواست POST به REST API"
};
string json = JsonSerializer.Serialize(newPost);
HttpContent content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("https://jsonplaceholder.typicode.com/posts", content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Post createdPost = JsonSerializer.Deserialize<Post>(responseBody);
Console.WriteLine($"پست ایجاد شد ID: {createdPost.Id}, Title: {createdPost.Title}");
}
catch (HttpRequestException e)
{
Console.WriteLine($"خطا در درخواست: {e.Message}");
}
}
}
public class Post
{
public int UserId { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
}
مثال کاربردی نشان میدهد چگونه میتوان درخواست POST به REST API ارسال کرد. با استفاده از DefaultRequestHeaders نوع محتوای پذیرفتهشده مشخص میشود. متد PostAsync به صورت غیرهمزمان اجرا شده و EnsureSuccessStatusCode صحت پاسخ را بررسی میکند. دسیریالسازی JSON به شیء Post امکان پردازش تایپشده دادهها را فراهم میآورد. این مثال اصول OOP، الگوریتمها و ساختارهای داده را به کار میگیرد و بهینهسازی منابع و مدیریت خطا را نشان میدهد.
بهترین شیوهها در سیشارپ برای کار با REST APIها شامل استفاده مجدد از HttpClient، اعمال async/await برای عملیات غیرهمزمان، بررسی پاسخها با EnsureSuccessStatusCode و مدیریت HttpRequestException است.
خطاهای رایج شامل ایجاد چندین نمونه HttpClient (که باعث نشت حافظه میشود)، دسیریالسازی نادرست JSON و مسدود کردن Thread اصلی است. برای بهینهسازی، تعداد درخواستها را کاهش دهید، از کش استفاده کنید و الگوریتمهای کارآمد بهکار گیرید. برای امنیت، از HTTPS استفاده کرده، دادههای حساس را محافظت کنید و پاسخهای خارجی را با احتیاط پردازش نمایید.
📊 جدول مرجع
سیشارپ Element/Concept | Description | Usage Example |
---|---|---|
HttpClient | کلاس برای ارسال درخواستهای HTTP | HttpClient client = new HttpClient(); |
Async/Await | اجرای غیرهمزمان متدها | await client.GetAsync(url); |
JsonSerializer | سریالسازی و دسیریالسازی JSON | Post post = JsonSerializer.Deserialize<Post>(jsonString); |
HttpRequestException | مدیریت خطاهای HTTP | catch (HttpRequestException e) { Console.WriteLine(e.Message); } |
StringContent | ارسال داده در بدنه درخواست | new StringContent(json, Encoding.UTF8, "application/json"); |
یادگیری کار با REST APIها در سیشارپ به شما امکان میدهد برنامههای غیرهمزمان، مدیریت دادهها، پردازش JSON و مدیریت خطاهای HTTP را بهخوبی انجام دهید. برای پیشرفت، مطالعه احراز هویت با OAuth/JWT، مدیریت چند API، پیادهسازی retry و کنترل صفحهبندی دادهها توصیه میشود. منابع رسمی سیشارپ و مستندات HttpClient و System.Text.Json ابزارهای مفیدی برای یادگیری عمیقتر هستند.
🧠 دانش خود را بیازمایید
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود