مقدمة: REST API بلغة C# — الأمر بسيط
\nREST API (نقل الحالة التمثيلية) هو نمط معماري لإنشاء خدمات الويب، يُستخدم اليوم في كل تطبيق حديث تقريبًا. إذا كنت ترغب في تعلم كتابة الواجهة الخلفية بلغة C# بسرعة، فإن ASP.NET Core هو الخيار الأفضل للبدء. في هذه المقالة، سنقوم خلال 30 دقيقة بإنشاء REST API كامل لإدارة قائمة المهام (Todo List). ستتعلم كيفية إعداد المشروع، كتابة المتحكمات، ربط قاعدة البيانات، واختبار API عبر Swagger.
\nهل أنت مستعد؟ لنبدأ!
\n\nالخطوة 1: إنشاء المشروع وإعداد البيئة
\nأولاً، نحتاج إلى تثبيت .NET SDK (الإصدار 6.0 أو أحدث). يمكنك تنزيله من الموقع الرسمي لـ Microsoft. بعد التثبيت، افتح الطرفية أو موجه الأوامر وأنشئ مشروعًا جديدًا:
\ndotnet new webapi -n TodoApi\ncd TodoApi\nسينشئ هذا الأمر قالب ويب-API مع Swagger مثبت مسبقًا. افتح المشروع في Visual Studio Code أو أي بيئة تطوير متكاملة أخرى. يتضمن هيكل المشروع بالفعل مجلدات Controllers و Models وملف Program.cs.
الآن، أضف دعم Entity Framework Core للعمل مع قاعدة البيانات. قم بتثبيت الحزم اللازمة:
\ndotnet add package Microsoft.EntityFrameworkCore.InMemory\ndotnet add package Microsoft.EntityFrameworkCore.Design\nسنستخدم قاعدة بيانات InMemory للتبسيط — سيتم تخزين البيانات في الذاكرة العاملة. للإنتاج، يمكنك استبدالها بـ SQL Server أو PostgreSQL.
\n\nالخطوة 2: إنشاء نموذج البيانات وسياق قاعدة البيانات
\nلننشئ النموذج TodoItem. في مجلد Models، أنشئ ملفًا باسم TodoItem.cs:
namespace TodoApi.Models;\n\npublic class TodoItem\n{\n public long Id { get; set; }\n public string? Title { get; set; }\n public bool IsComplete { get; set; }\n}\nالآن، لننشئ سياق قاعدة البيانات. في مجلد Data (إذا لم يكن موجودًا، قم بإنشائه) أضف ملفًا باسم TodoContext.cs:
using Microsoft.EntityFrameworkCore;\nusing TodoApi.Models;\n\nnamespace TodoApi.Data;\n\npublic class TodoContext : DbContext\n{\n public TodoContext(DbContextOptions<TodoContext> options) : base(options) { }\n public DbSet<TodoItem> TodoItems { get; set; }\n}\nسجل السياق في Program.cs:
using Microsoft.EntityFrameworkCore;\nusing TodoApi.Data;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddDbContext<TodoContext>(opt =>\n opt.UseInMemoryDatabase("TodoList"));\n\nbuilder.Services.AddControllers();\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\n\nvar app = builder.Build();\n\nif (app.Environment.IsDevelopment())\n{\n app.UseSwagger();\n app.UseSwaggerUI();\n}\n\napp.UseHttpsRedirection();\napp.UseAuthorization();\napp.MapControllers();\napp.Run();\n\nالخطوة 3: كتابة المتحكم بعمليات CRUD
\nلننشئ متحكمًا للعمل مع المهام. في مجلد Controllers، أضف ملفًا باسم TodoItemsController.cs:
using Microsoft.AspNetCore.Mvc;\nusing Microsoft.EntityFrameworkCore;\nusing TodoApi.Data;\nusing TodoApi.Models;\n\nnamespace TodoApi.Controllers;\n\n[Route("api/[controller]")]\n[ApiController]\npublic class TodoItemsController : ControllerBase\n{\n private readonly TodoContext _context;\n\n public TodoItemsController(TodoContext context)\n {\n _context = context;\n }\n\n // GET: api/TodoItems\n [HttpGet]\n public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()\n {\n return await _context.TodoItems.ToListAsync();\n }\n\n // GET: api/TodoItems/5\n [HttpGet("{id}")]\n public async Task<ActionResult<TodoItem>> GetTodoItem(long id)\n {\n var todoItem = await