آموزش Web API با C#

تاریخ: 1404/12/4 ساعت: 11:23 بازدید: 19

Web API با C# چیست و چرا باید یاد بگیری؟

اگر توسعه‌دهنده‌ای یا که می‌خواهی وارد دنیای بک‌اند شوی، احتمالاً بارها اسم Web API به گوشت خورده. اما واقعاً Web API چیست و چرا یادگیری آن با زبان C# این‌قدر مهم شده؟

به زبان ساده، Web API (Application Programming Interface) یک رابط برنامه‌نویسی است که به اپلیکیشن‌های مختلف اجازه می‌دهد با یکدیگر «حرف بزنند». وقتی اپ موبایلت اطلاعات آب‌وهوا را نشان می‌دهد، وقتی فروشگاه آنلاین درگاه پرداخت را فراخوانی می‌کند، یا وقتی داشبورد مدیریتی‌ات داده‌های سرور را می‌گیرد — همه این‌ها از طریق Web API اتفاق می‌افتد.

C# و ASP.NET Core یکی از قوی‌ترین، پرسرعت‌ترین و پرطرفدارترین ابزارها برای ساخت Web API هستند. مایکروسافت این فریمورک را کاملاً متن‌باز کرده و عملکرد آن در بنچمارک‌های بین‌المللی حرف ندارد.

  • سرعت بالا: ASP.NET Core در رتبه‌های برتر جدول سرعت فریمورک‌های وب قرار دارد.
  • Cross-Platform: روی ویندوز، لینوکس و مک اجرا می‌شود.
  • بازار کار قوی: تقاضای بالا برای متخصصان C# در شرکت‌های ایرانی و بین‌المللی.
  • اکوسیستم غنی: ابزارهایی مثل Entity Framework, Swagger, JWT و… در کنارت هستند.

پیش‌نیازهای یادگیری Web API با C#

قبل از شروع، باید چند مفهوم پایه را بدانی تا مسیرت هموار باشد:

  • آشنایی با زبان C#: مفاهیمی مثل کلاس، اینترفیس، async/await و LINQ.
  • مفاهیم پایه HTTP: درک متدهای GET, POST, PUT, DELETE و کدهای وضعیت (Status Codes).
  • آشنایی با JSON: فرمت اصلی تبادل داده در APIها.
  • نصب Visual Studio یا VS Code: ابزار توسعه.
  • نصب .NET SDK: حداقل نسخه ۶ یا ۸ توصیه می‌شود.

مفهوم REST و RESTful API

وقتی از Web API با C# صحبت می‌کنیم، معمولاً منظورمان ساخت یک RESTful API است. REST مخفف «Representational State Transfer» است و یک سبک معماری برای طراحی سرویس‌های وب است.

اصول کلیدی REST

  • Stateless: هر درخواست باید تمام اطلاعات لازم را در خود داشته باشد.
  • Client-Server: جداسازی کامل بین کلاینت (فرانت‌اند) و سرور (بک‌اند).
  • Uniform Interface: استفاده از متدهای استاندارد HTTP.
  • Resource-Based: همه چیز به عنوان یک «منبع» (Resource) در نظر گرفته می‌شود.

متدهای HTTP در RESTful API

  • GET: دریافت داده‌ها (مثلاً لیست محصولات).
  • POST: ایجاد داده جدید (مثلاً ثبت سفارش).
  • PUT / PATCH: ویرایش داده موجود.
  • DELETE: حذف داده.

ساخت اولین Web API با ASP.NET Core — گام به گام

گام اول: ایجاد پروژه جدید

ترمینال را باز کن و دستور زیر را اجرا کن:


dotnet new webapi -n MyFirstAPI

cd MyFirstAPI

dotnet run

همین! با این سه دستور یک Web API کامل راه‌اندازی شد. حالا بریم سراغ ساختار پروژه.

گام دوم: آشنایی با ساختار پروژه

  • Program.cs: نقطه ورود برنامه و تنظیمات اصلی.
  • Controllers/: پوشه‌ای که Controllerها در آن قرار می‌گیرند.
  • appsettings.json: تنظیمات پروژه مثل Connection String.
  • Properties/launchSettings.json: تنظیمات اجرا و پورت‌ها.

گام سوم: ساخت یک Controller ساده

فایل جدیدی به نام ProductsController.cs در پوشه Controllers بساز:


using Microsoft.AspNetCore.Mvc;

namespace MyFirstAPI.Controllers

{

[ApiController]

[Route(“api/[controller]”)]

public class ProductsController : ControllerBase

{

private static List _products = new List

{

new Product { Id = 1, Name = “لپ‌تاپ”, Price = 25000000 },

new Product { Id = 2, Name = “ماوس”, Price = 500000 }

};

// GET: api/products

[HttpGet]

public ActionResult> GetAll()

{

return Ok(_products);

}

// GET: api/products/1

[HttpGet(“{id}”)]

public ActionResult GetById(int id)

{

var product = _products.FirstOrDefault(p => p.Id == id);

if (product == null)

return NotFound();

return Ok(product);

}

// POST: api/products

[HttpPost]

public ActionResult Create([FromBody] Product product)

{

product.Id = _products.Max(p => p.Id) + 1;

_products.Add(product);

return CreatedAtAction(nameof(GetById), new { id = product.Id }, product);

}

// PUT: api/products/1

[HttpPut(“{id}”)]

public IActionResult Update(int id, [FromBody] Product updated)

{

var product = _products.FirstOrDefault(p => p.Id == id);

if (product == null) return NotFound();

product.Name = updated.Name;

product.Price = updated.Price;

return NoContent();

}

// DELETE: api/products/1

[HttpDelete(“{id}”)]

public IActionResult Delete(int id)

{

var product = _products.FirstOrDefault(p => p.Id == id);

if (product == null) return NotFound();

_products.Remove(product);

return NoContent();

}

}

public class Product

{

public int Id { get; set; }

public string Name { get; set; } = string.Empty;

public decimal Price { get; set; }

}

}

اتصال به دیتابیس با Entity Framework Core

در دنیای واقعی، داده‌ها را در لیست نگه نمی‌داری! باید از دیتابیس استفاده کنی. Entity Framework Core (EF Core) یک ORM قدرتمند است که کار با دیتابیس را بسیار ساده می‌کند.

نصب پکیج‌های لازم


dotnet add package Microsoft.EntityFrameworkCore.SqlServer

dotnet add package Microsoft.EntityFrameworkCore.Tools

ساخت DbContext


using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext

{

public AppDbContext(DbContextOptions options)

: base(options) { }

public DbSet Products { get; set; }

}

ثبت DbContext در Program.cs


builder.Services.AddDbContext(options =>

options.UseSqlServer(builder.Configuration

.GetConnectionString(“DefaultConnection”)));

امنیت API با JWT Authentication

یکی از مهم‌ترین بخش‌های هر API حرفه‌ای، احراز هویت (Authentication) است. استاندارد طلایی در این زمینه، استفاده از JWT (JSON Web Token) است.

JWT چطور کار می‌کند؟

  • گام ۱: کاربر با نام کاربری و رمز عبور Login می‌کند.
  • گام ۲: سرور یک Token رمزنگاری‌شده تولید و برمی‌گرداند.
  • گام ۳: کلاینت این Token را در هدر هر درخواست بعدی ارسال می‌کند.
  • گام ۴: سرور Token را اعتبارسنجی می‌کند و پاسخ می‌دهد.

نصب و پیکربندی JWT


dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

// در Program.cs:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

.AddJwtBearer(options =>

{

options.TokenValidationParameters = new TokenValidationParameters

{

ValidateIssuer = true,

ValidateAudience = true,

ValidateLifetime = true,

ValidateIssuerSigningKey = true,

ValidIssuer = builder.Configuration[“Jwt:Issuer”],

ValidAudience = builder.Configuration[“Jwt:Audience”],

IssuerSigningKey = new SymmetricSecurityKey(

Encoding.UTF8.GetBytes(builder.Configuration[“Jwt:Key”]))

};

});

مستندسازی API با Swagger

Swagger (OpenAPI) یکی از بهترین ابزارها برای مستندسازی خودکار API است. وقتی یک API می‌سازی، تیم فرانت‌اند باید بداند چه Endpointهایی داری. Swagger این کار را به شکل بصری و تعاملی انجام می‌دهد.

خبر خوب اینکه در پروژه‌های جدید ASP.NET Core، Swagger به‌صورت پیش‌فرض نصب و فعال است. فقط کافی است پروژه را اجرا کنی و به آدرس /swagger بروی.

💡 نکته حرفه‌ای

برای محیط Production، Swagger را غیرفعال کن تا اطلاعات API‌ات لو نرود. از متغیر محیطی ASPNETCORE_ENVIRONMENT برای تشخیص محیط استفاده کن.

Middleware و Pipeline در ASP.NET Core

درک Middleware Pipeline برای ساخت APIهای حرفه‌ای ضروری است. هر درخواست HTTP که به سرور می‌رسد، از یک «خط لوله» عبور می‌کند. در هر نقطه می‌توانی منطق خاصی اضافه کنی:

  • Exception Handling Middleware: مدیریت خطاها به‌صورت متمرکز.
  • Authentication Middleware: اعتبارسنجی Token.
  • Logging Middleware: ثبت تمام درخواست‌ها.
  • Rate Limiting Middleware: جلوگیری از سوءاستفاده.
  • CORS Middleware: مدیریت دسترسی از دامنه‌های مختلف.

الگوی Repository و معماری تمیز

در پروژه‌های واقعی، نباید مستقیم از DbContext در Controller استفاده کنی. الگوی Repository لایه‌ای انتزاعی بین منطق کسب‌وکار و دسترسی به داده ایجاد می‌کند.


// Interface

public interface IProductRepository

{

Task> GetAllAsync();

Task GetByIdAsync(int id);

Task CreateAsync(Product product);

Task UpdateAsync(Product product);

Task DeleteAsync(int id);

}

// Implementation

public class ProductRepository : IProductRepository

{

private readonly AppDbContext _context;

public ProductRepository(AppDbContext context)

{

_context = context;

}

public async Task> GetAllAsync()

{

return await _context.Products.ToListAsync();

}

// … سایر متدها

}

Validation داده‌های ورودی

هرگز به داده‌های ورودی کاربر اعتماد نکن! Data Validation یکی از اصول امنیتی مهم است. در ASP.NET Core می‌توانی از Data Annotations استفاده کنی:


public class CreateProductDto

{

[Required(ErrorMessage = “نام محصول الزامی است”)]

[StringLength(100, MinimumLength = 2)]

public string Name { get; set; } = string.Empty;

[Required]

[Range(1000, 1000000000, ErrorMessage = “قیمت باید بین ۱۰۰۰ و ۱ میلیارد تومان باشد”)]

public decimal Price { get; set; }

[Required]

[Range(0, int.MaxValue)]

public int Stock { get; set; }

}

🚀 می‌خواهی کسب‌وکارت آنلاین رشد کند؟

آیا می‌خواهید سایت شما هم مثل رقبا در صفحه اول گوگل باشد و زنگ‌خورهایتان چند برابر شود؟ سئوی سایت خود را به متخصصان ما بسپارید. همین حالا برای مشاوره رایگان با ما تماس بگیرید:

📞 09190994063  |  09376846692

مدیریت خطا (Error Handling) حرفه‌ای

یک API حرفه‌ای باید خطاها را به شکل استاندارد و قابل‌فهم برگرداند. استفاده از ProblemDetails که استاندارد RFC 7807 است، توصیه می‌شود:


// Global Exception Handler Middleware

public class GlobalExceptionHandler : IMiddleware

{

private readonly ILogger _logger;

public GlobalExceptionHandler(ILogger logger)

{

_logger = logger;

}

public async Task InvokeAsync(HttpContext context, RequestDelegate next)

{

try

{

await next(context);

}

catch (Exception ex)

{

_logger.LogError(ex, “خطای غیرمنتظره رخ داد”);

context.Response.StatusCode = 500;

context.Response.ContentType = “application/json”;

await context.Response.WriteAsJsonAsync(new

{

error = “خطای داخلی سرور. لطفاً دوباره تلاش کنید.”,

traceId = context.TraceIdentifier

});

}

}

}

Versioning در Web API

وقتی API‌ات رشد می‌کند و کلاینت‌های متعددی از آن استفاده می‌کنند، به API Versioning نیاز داری. این کار باعث می‌شود بدون شکستن کلاینت‌های قدیمی، APIت را ارتقاء بدهی:


dotnet add package Asp.Versioning.Mvc

// در Program.cs:

builder.Services.AddApiVersioning(options =>

{

options.DefaultApiVersion = new ApiVersion(1, 0);

options.AssumeDefaultVersionWhenUnspecified = true;

options.ReportApiVersions = true;

});

// در Controller:

[ApiVersion(“1.0”)]

[Route(“api/v{version:apiVersion}/products”)]

public class ProductsV1Controller : ControllerBase { }

[ApiVersion(“2.0”)]

[Route(“api/v{version:apiVersion}/products”)]

public class ProductsV2Controller : ControllerBase { }

Caching برای بهبود عملکرد

Caching یکی از مهم‌ترین تکنیک‌ها برای بالا بردن سرعت API است. به جای هر بار Query گرفتن از دیتابیس، نتیجه را کش می‌کنی:

  • In-Memory Cache: ساده و سریع، مناسب برای داده‌های کم‌حجم.
  • Distributed Cache با Redis: مناسب برای محیط‌های چند سرور.
  • Response Cache: کش کردن پاسخ کامل HTTP.
  • Output Cache (.NET 7+): جدیدترین و قدرتمندترین روش.

تست Web API با Unit Test و Integration Test

یک توسعه‌دهنده حرفه‌ای کد می‌نویسد، تست هم می‌نویسد! تست‌نویسی برای Web API دو سطح دارد:

  • Unit Test: تست منطق کسب‌وکار به‌صورت ایزوله، با استفاده از Mock.
  • Integration Test: تست کل Pipeline از درخواست تا پاسخ با WebApplicationFactory.

// Integration Test نمونه

public class ProductsControllerTests : IClassFixture>

{

private readonly HttpClient _client;

public ProductsControllerTests(WebApplicationFactory factory)

{

_client = factory.CreateClient();

}

[Fact]

public async Task GetAllProducts_ReturnsOkResult()

{

var response = await _client.GetAsync(“/api/products”);

response.EnsureSuccessStatusCode();

Assert.Equal(“application/json”,

response.Content.Headers.ContentType?.MediaType);

}

}

Deploy کردن Web API روی سرور

بعد از توسعه، نوبت به استقرار (Deployment) می‌رسد. گزینه‌های محبوب در ایران:

  • Linux VPS + Nginx: محبوب‌ترین روش. Nginx به عنوان Reverse Proxy عمل می‌کند.
  • Docker + Docker Compose: قابل‌حمل و قابل مقیاس‌بندی.
  • Windows IIS: مناسب برای سرورهای ویندوزی.
  • Azure / AWS: برای تیم‌هایی که به Cloud دسترسی دارند.

بهترین شیوه‌ها (Best Practices) برای Web API حرفه‌ای

  • ✅ از DTOها استفاده کن: هرگز مستقیم Entity دیتابیس را برنگردان.
  • ✅ نام‌گذاری استاندارد: URLها را کوچک و به شکل kebab-case بنویس.
  • ✅ Status Code مناسب: 200 برای موفقیت، 201 برای ایجاد، 400 برای خطای کاربر، 404 برای یافت‌نشدن.
  • ✅ Pagination: هرگز هزاران رکورد یک‌جا برنگردان.
  • ✅ Logging مناسب: از Serilog یا NLog برای ثبت رویدادها استفاده کن.
  • ✅ HTTPS اجباری: هرگز API را بدون SSL راه‌اندازی نکن.
  • ✅ اعتبارسنجی همه ورودی‌ها: هرگز به داده‌های کاربر اعتماد نکن.

📈 رقبای شما همین الان در گوگل پیدا می‌شوند — شما چطور؟

داشتن یک سایت بدون سئو مثل داشتن یک مغازه در کوچه‌ای بن‌بست است. تیم متخصص ما با استراتژی‌های اثبات‌شده، سایت شما را به صفحه اول گوگل می‌رساند و فروشتان را چند برابر می‌کند. همین حالا برای مشاوره رایگان تماس بگیرید:

📞 09190994063  |  09376846692

سوالات متداول (FAQ)

❓ تفاوت Web API و Web Service چیست؟

Web Service اصطلاح عمومی‌تری است که شامل SOAP و REST می‌شود. Web API معمولاً به سرویس‌های مبتنی بر HTTP/REST اشاره دارد و ساده‌تر، سبک‌تر و محبوب‌تر است. در دنیای مدرن، اغلب Web API با JSON و REST استفاده می‌شود که نسبت به SOAP با XML بسیار کاربردی‌تر است.

❓ آیا برای یادگیری Web API با C# باید .NET Framework بدانم یا .NET Core؟

قطعاً .NET Core (حالا .NET 6, 7, 8) را یاد بگیر. .NET Framework قدیمی است و فقط روی ویندوز اجرا می‌شود. نسخه‌های جدید .NET کراس‌پلتفرم، سریع‌تر و با پشتیبانی فعال هستند. اگر پروژه جدید شروع می‌کنی، حتماً از .NET 8 استفاده کن.

❓ چطور Web API را با فرانت‌اند React یا Angular متصل کنم؟

باید CORS (Cross-Origin Resource Sharing) را در API پیکربندی کنی تا درخواست‌های فرانت‌اند قبول شوند. در Program.cs از builder.Services.AddCors() استفاده کن و دامنه فرانت‌اند را اضافه کن. سپس فرانت‌اند با fetch API یا Axios می‌تواند با API ارتباط برقرار کند.

❓ Minimal API چیست و آیا بهتر از Controller-based API است؟

Minimal API از .NET 6 معرفی شد و برای پروژه‌های کوچک و Microserviceهای ساده عالی است. کد کمتری می‌نویسی اما برای پروژه‌های بزرگ، Controller-based API همچنان ساختارمندتر و نگهداری‌پذیرتر است. انتخاب بین این دو به اندازه و پیچیدگی پروژه بستگی دارد.

❓ چطور Web API را در برابر حملات ایمن کنم؟

امنیت Web API چند لایه دارد: اول احراز هویت با JWT، دوم اعتبارسنجی کامل ورودی‌ها، سوم Rate Limiting برای جلوگیری از DDoS، چهارم HTTPS اجباری، پنجم پیشگیری از SQL Injection با EF Core، و ششم CORS صحیح. همچنین از ابزارهایی مثل OWASP ZAP برای تست امنیت استفاده کن.

❓ بازار کار Web API با C# در ایران چطور است؟

بازار کار C# و ASP.NET Core در ایران بسیار قوی است. اغلب شرکت‌های نرم‌افزاری بزرگ ایرانی از این تکنولوژی استفاده می‌کنند. حقوق یک توسعه‌دهنده متوسط C# در تهران چشمگیر است و توسعه‌دهندگان ارشد با تسلط بر Web API، Entity Framework و Docker در بازار کار بسیار مورد تقاضا هستند. همچنین امکان کار با شرکت‌های خارجی به‌صورت ریموت نیز وجود دارد.

📚 جمع‌بندی: یادگیری Web API با C# یک مهارت ارزشمند است که درهای زیادی را باز می‌کند. مسیر را با پروژه‌های کوچک شروع کن، مفاهیم را عمیق یاد بگیر و کد بزن. موفقیت در این مسیر به تمرین مداوم نیاز دارد.

نظرات کاربران