جدول المحتويات
CRUD هو اختصار يشير إلى أربع وظائف أساسية يجب أن تكون النماذج قادرة على تنفيذها في أدنى تقدير. وهي إنشاء (Create)، قراءة (Read)، تحديث (Update)، وحذف (Delete). تعد هذه العمليات حجر الأساس في تصميم أنظمة تخزين البيانات.
إنشاء (Create)، قراءة (Read)، تحديث (Update)، وحذف (Delete)
عند بناء واجهات برمجة التطبيقات (APIs)، نسعى لأن تقدم النماذج الوظائف الأساسية الأربعة: إنشاء، قراءة، تحديث، وحذف الموارد. غالبًا ما يشير علماء الحاسوب إلى هذه الوظائف باستخدام مصطلح CRUD. النموذج الكامل هو الذي يوفر هذه الوظائف الأربع على الأقل. وإذا كان هناك إجراء لا يمكن وصفه بإحدى هذه العمليات، فقد يكون من الأنسب أن يكون له نموذج خاص به.
أهمية CRUD في تطوير التطبيقات
تعد بنية CRUD شائعة جدًا في تطوير تطبيقات الويب لأنها توفر إطارًا مفهومًا وسهل الاستخدام يذكر المطورين بكيفية تصميم نماذج قابلة للاستخدام. على سبيل المثال، دعونا نتخيل نظامًا لإدارة مكتبة كتب. يحتوي هذا النظام على مورد يُسمى “الكتب” لتخزين كائنات الكتاب. يمكن أن يبدو كائن الكتاب بالشكل التالي:
"book": {
"id": <Integer>,
"title": <String>,
"author": <String>,
"isbn": <Integer>
}
لتكون هذه المكتبة قابلة للاستخدام، يجب أن نضمن وجود آليات واضحة لإجراء عمليات CRUD:
إنشاء (Create)
يتضمن وظيفة تُستدعى عندما يتم إضافة كتاب جديد إلى الكتالوج. يقوم البرنامج الذي يستدعي الوظيفة بتزويد قيم مثل “title”، “author”، و”isbn”. بعد استدعاء هذه الوظيفة، يتم إنشاء إدخال جديد في مورد الكتب مع تعيين معرف فريد لهذا الكتاب.
قراءة (Read)
تتضمن وظيفة تُستدعى لعرض جميع الكتب الموجودة حاليًا في الكتالوج أو استرجاع كتاب محدد بناءً على العنوان أو المؤلف أو رقم ISBN. هذه الوظيفة لا تغير الموارد بل تتيح عرضها فقط.
تحديث (Update)
يجب أن تكون هناك وظيفة تُستدعى لتغيير معلومات كتاب معين. يوفر البرنامج الذي يستدعي الوظيفة القيم الجديدة مثل “title”، “author”، و”isbn”. بعد استدعاء الوظيفة، يتم تحديث السجل في مورد الكتب بالمعلومات الجديدة.
حذف (Delete)
تُستخدم لإزالة كتاب من الكتالوج. يقوم البرنامج بتحديد الكتاب عن طريق تقديم قيم مثل “title”، “author”، أو “isbn”، ويتم إزالة الكتاب المحدد.
CRUD وREST
في بيئة REST، تتطابق عمليات CRUD مع طرق HTTP كما يلي:
- POST لإنشاء الموارد.
- GET لقراءة الموارد.
- PUT لتحديث الموارد.
- DELETE لحذف الموارد.
مثال عملي على REST
لنتخيل أننا نعمل على نظام لإدارة الأطباق وأسعارها في مطعم. سنوضح كيفية تنفيذ عمليات CRUD في هذا السياق.
إنشاء (Create)
لإنشاء موارد جديدة في بيئة REST، نستخدم غالبًا طريقة HTTP POST. على سبيل المثال، إذا أردنا إضافة طبق جديد، يمكننا استخدام طلب POST بالشكل التالي:
الطلب:
POST http://www.myrestaurant.com/dishes/
المحتوى:
{
"dish": {
"name": "Avocado Toast",
"price": 8
}
}
الاستجابة:
{
"dish": {
"id": 1223,
"name": "Avocado Toast",
"price": 8
}
}
قراءة (Read)
نستخدم طريقة HTTP GET لاسترداد الموارد. يمكن استخدامها لاسترداد قائمة كاملة من العناصر أو عنصر واحد:
الطلب:
GET http://www.myrestaurant.com/dishes/
الاستجابة:
{
"dishes": [
{
"id": 1,
"name": "Spring Rolls",
"price": 6
},
{
"id": 1223,
"name": "Avocado Toast",
"price": 8
}
]
}
تحديث (Update)
لتحديث الموارد، نستخدم طريقة HTTP PUT. إذا زاد سعر طبق معين، يمكننا تحديث هذه المعلومات باستخدام طلب PUT:
الطلب:
PUT http://www.myrestaurant.com/dishes/1223
المحتوى:
{
"dish": {
"name": "Avocado Toast",
"price": 10
}
}
الاستجابة:
{
"dish": {
"name": "Avocado Toast",
"price": 10
}
}
حذف (Delete)
نستخدم طريقة HTTP DELETE لإزالة الموارد. إذا أردنا إزالة طبق معين، نقوم بإرسال طلب DELETE:
الطلب:
DELETE http://www.myrestaurant.com/dishes/1223
الاستجابة:
Status Code - 204 (NO CONTENT)
ممارسة CRUD
للتدريب على عمليات CRUD، دعونا نتصور تصميم نظام لتتبع دروس التمارين الرياضية. يحتوي النظام على موارد تخزن بيانات الدروس مثل الاسم، المدرب، والمدة الزمنية. على سبيل المثال:
{
"class": {
"id": 1,
"name": "Pure Strength",
"trainer": "Bicep Bob",
"duration": 1.5
}
}
الموارد: جميع الدروس يتم تخزينها على الرابط: www.musclecademy.com/classes
.
الأسئلة:
- ما هي المسارات التي يجب تنفيذها لتوفير وظائف CRUD؟
- ما تأثير كل مسار على قاعدة البيانات؟
- ما محتوى الاستجابة لكل مسار؟
- ما هي أكواد الاستجابة لكل مسار؟
الإجابات:
إنشاء (Create)
- المسار: POST
/classes
- التأثير على قاعدة البيانات: إضافة درس جديد.
- كود الاستجابة: 201
قراءة (Read)
- المسار: GET
/classes
(لجميع الدروس) أو GET/classes/:id
(لدرس محدد). - التأثير على قاعدة البيانات: لا يوجد.
- كود الاستجابة: 200
تحديث (Update)
- المسار: PUT
/classes/:id
- التأثير على قاعدة البيانات: تحديث بيانات الدرس.
- كود الاستجابة: 200
حذف (Delete)
- المسار: DELETE
/classes/:id
- التأثير على قاعدة البيانات: إزالة الدرس.
- كود الاستجابة: 204
الخاتمة
تمثل عمليات CRUD الأساس لأي نموذج قابل للاستخدام في أنظمة تخزين البيانات. من خلال تطبيق هذه المبادئ، يمكنك تصميم أنظمة قوية وقابلة للتطوير تلبي احتياجات المستخدمين بكفاءة. استمر في الممارسة مع أمثلة جديدة لتعميق فهمك لهذه البنية.