كيفية كتابة REST API بلغة C# خلال 30 دقيقة: دليل خطوة بخطوة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: REST API على C# — أمر بسيط



REST API (Representational State Transfer) هو نمط معماري يسمح للعملاء والخوادم بتبادل البيانات عبر HTTP. في تطوير الويب الحديث، تعتبر API المعيار الفعلي لبناء الواجهة الخلفية لتطبيقات الهاتف المحمول والمواقع الإلكترونية والخدمات المصغرة. على منصة .NET (C#)، تم تحسين تطوير REST API إلى أقصى حد: يمكنك الحصول على نموذج أولي يعمل في غضون نصف ساعة حرفيًا، حتى لو كنت مبتدئًا.



في هذه المقالة، سنقوم بإنشاء REST API كامل لإدارة قائمة المهام (ToDo List). ستتعلم كيفية إعداد مشروع ASP.NET Core Web API، وإنشاء نموذج بيانات، وتنفيذ عمليات CRUD (Create, Read, Update, Delete)، واختبار API عبر Swagger. العملية بأكملها ستستغرق 30 دقيقة كحد أقصى.



1. إنشاء المشروع وتثبيت التبعيات



أولاً، افتح Visual Studio 2022 (أو Visual Studio Code مع تثبيت .NET SDK 6.0/7.0/8.0). اتبع الخطوات التالية:



  1. اختر إنشاء مشروع جديد ← ASP.NET Core Web API.
  2. سمِّ المشروع، على سبيل المثال TodoApi.
  3. تأكد من تحديد الإطار .NET 8.0 (أو أحدث).
  4. قم بإلغاء تحديد Use controllers إذا كنت تريد استخدام Minimal API، ولكن في هذا الدليل سنستخدم وحدات التحكم الكلاسيكية — اتركها محددة.
  5. اضغط إنشاء.


بعد إنشاء المشروع، سيكون الهيكل كالتالي:



TodoApi/├── Controllers/├── Models/├── Program.cs└── appsettings.json


لا يلزم تثبيت حزم إضافية — جميع المكونات الضرورية مدمجة بالفعل في ASP.NET Core.



2. إنشاء نموذج البيانات وسياق قاعدة البيانات



2.1. نموذج TodoItem



أنشئ مجلدًا باسم Models وأضف إليه الفئة TodoItem.cs:



namespace TodoApi.Models;

public class TodoItem{ public int Id { get; set; } public string? Title { get; set; } public bool IsComplete { get; set; }}


هذا هو النموذج الأدنى: المعرف، عنوان المهمة، وعلامة الإكمال.



2.2. سياق قاعدة البيانات



الآن سنقوم بإنشاء سياق لـ Entity Framework Core. في مجلد Data (قم بإنشائه) أضف الفئة TodoContext.cs:



using Microsoft.EntityFrameworkCore;using TodoApi.Models;

namespace TodoApi.Data;

public class TodoContext : DbContext{ public TodoContext(DbContextOptions<TodoContext> options) : base(options) { }

public DbSet<TodoItem> TodoItems { get; set; }}


2.3. إعداد Program.cs



افتح Program.cs وأضف تسجيل السياق و Swagger:



using Microsoft.EntityFrameworkCore;using TodoApi.Data;

var builder = WebApplication.CreateBuilder(args);

// إضافة وحدات التحكمbuilder.Services.AddControllers();

// تسجيل سياق قاعدة البيانات (نستخدم InMemory للتبسيط)builder.Services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList"));

// Swaggerbuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment()){ app.UseSwagger(); app.UseSwaggerUI();}

app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();

app.Run();


لاحظ: نحن نستخدم UseInMemoryDatabase — وهذا مناسب للنماذج الأولية. في مشروع حقيقي، استبدله بـ SQL Server أو PostgreSQL أو قاعدة بيانات أخرى.



3. تنفيذ وحدة التحكم بعمليات CRUD



الآن الجزء الأهم — وحدة التحكم. أنشئ في مجلد Controllers ملف TodoItemsController.cs:



using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore;using TodoApi.Data;using TodoApi.Models;

namespace TodoApi.Controllers;

[Route("api/[controller]")][ApiController]public class TodoItemsController : ControllerBase{ private readonly TodoContext _context;

public TodoItemsController(TodoContext context) { _context = context; }

// GET: api/TodoItems [HttpGet] public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems() { return await _context.TodoItems.ToListAsync(); }

// GET: api/TodoItems/5 [HttpGet("{id}")] public async Task<ActionResult<TodoItem>> GetTodoItem(int id) { var todoItem = await _context.TodoItems.FindAsync(id);

if (todoItem == null) { return NotFound(); }

return todoItem; }

// POST: api/TodoItems [HttpPost] public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem) { _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync();

return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem); }

// PUT: api/TodoItems/5 [HttpPut("{id}")] public async Task<IActionResult> PutTodoItem(int id, TodoItem todoItem) { if (id != todoItem.Id) { return BadRequest(); }

_context.Entry(todoItem).State = EntityState.Modified;

try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TodoItemExists(id)) { return NotFound(); } else { throw; } }

return NoContent(); }

// DELETE: api/TodoItems/5 [HttpDelete("{id}")] public async Task<IActionResult> DeleteTodoItem(int id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); }

_context.TodoItems.Remove(todoItem); await _context.SaveChangesAsync();

return NoContent(); }

private bool TodoItemExists(int id) { return _context.TodoItems.Any(e => e.Id == id); }}


هذا كل شيء! لقد قمت للتو بإنشاء REST API كامل مع عمليات CRUD. اختبره باستخدام Swagger أو Postman أو curl.

المدونات

توصيات الكتب