مقدمة: REST API بلغة C# — سريع وبسيط
تطوير تطبيقات الويب الحديثة والخدمات المحمولة لا يمكن أن يتم بدون REST API. إذا كنت ترغب في إنشاء خلفية (backend) لمشروعك بسرعة، فإن C# مع إطار العمل ASP.NET Core هو الخيار الأمثل. بفضل الأدوات المدمجة، والحد الأدنى من التهيئة، والأداء الممتاز، يمكنك كتابة REST API كامل في 30 دقيقة فقط.
في هذه المقالة، سنشرح عملية إنشاء API بسيط لإدارة قائمة المهام (Todo List). ستتعلم كيفية إعداد المشروع، وإنشاء نماذج البيانات، وتنفيذ المتحكمات (Controllers) مع عمليات CRUD، واختبار API باستخدام Swagger. جميع أمثلة الكود مكتوبة بلغة C# (.NET 8).
حتى لو كنت مبتدئًا في C#، باتباع التعليمات، ستحصل على API يعمل بحلول نهاية المقالة.
1. إنشاء المشروع وإعداد البيئة
أولاً، تأكد من تثبيت .NET SDK (الإصدار 8 أو أحدث). يمكنك تنزيله من الموقع الرسمي. بعد التثبيت، افتح الطرفية (Terminal) أو موجه الأوامر.
أنشئ مشروع ASP.NET Core Web API جديد باستخدام الأمر:
dotnet new webapi -n TodoApicd TodoApiسينشئ هذا الأمر مجلدًا باسم TodoApi بهيكل المشروع الأساسي. يحتوي بالفعل على ملف Program.cs — نقطة الدخول، ومجلد Controllers للمتحكمات المستقبلية.
افتح المشروع في Visual Studio أو Visual Studio Code أو Rider. للتبسيط، يمكنك استخدام أي محرر نصوص.
تأكد من وجود استدعاء AddSwaggerGen() و UseSwagger() في ملف Program.cs. تم تضمين Swagger تلقائيًا في القالب — مما يسهل الاختبار. إذا لم يكن موجودًا، أضف:
builder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();// ...app.UseSwagger();app.UseSwaggerUI();2. إنشاء نموذج البيانات والتخزين المؤقت
بالنسبة لـ API الخاص بنا، سنقوم بتخزين المهام في الذاكرة (in-memory). في مشروع حقيقي، ستقوم بتوصيل قاعدة بيانات، ولكن لعرض حل مدته 30 دقيقة، هذا كافٍ.
أنشئ مجلدًا باسم Models وبداخله ملف TodoItem.cs:
public class TodoItem{ public int Id { get; set; } public string Title { get; set; } = string.Empty; public bool IsCompleted { get; set; }}الآن، لننشئ خدمة مستودع بسيطة. في مجلد Services، أنشئ واجهة ITodoService.cs وتنفيذها TodoService.cs. سيسهل هذا التبديل إلى قاعدة بيانات حقيقية في المستقبل.
ITodoService.cs:
public interface ITodoService{ List<TodoItem> GetAll(); TodoItem? GetById(int id); TodoItem Create(TodoItem item); TodoItem? Update(int id, TodoItem item); bool Delete(int id);}TodoService.cs:
public class TodoService : ITodoService{ private readonly List<TodoItem> _items = new(); private int _nextId = 1;
public List<TodoItem> GetAll() => _items;
public TodoItem? GetById(int id) => _items.FirstOrDefault(i => i.Id == id);
public TodoItem Create(TodoItem item) { item.Id = _nextId++; _items.Add(item); return item; }
public TodoItem? Update(int id, TodoItem item) { var existing = GetById(id); if (existing == null) return null; existing.Title = item.Title; existing.IsCompleted = item.IsCompleted; return existing; }
public bool Delete(int id) { var item = GetById(id); if (item == null) return false; return _items.Remove(item); }}سجل الخدمة في حاوية DI في Program.cs:
المدونات
توصيات الكتب
اقرأ أيضًا