🧠 إيه هو الـ REST؟
REST (اختصار لـ Representational State Transfer) هو نمط معماري (Architectural Style) يُستخدم لتصميم خدمات الويب (Web Services)، ويعتمد على 6 قيود رئيسية، هدفها:
✅ البساطة
✅ سهولة الصيانة
✅ قابلية التوسع (Scalability)
✅ الأداء العالي
🔺 علشان الـ API يكون RESTful، لازم يلتزم بـ القيود الستة التالية:
1️⃣ واجهة موحدة (Uniform Interface)
توفر طريقة موحدة للتعامل مع الموارد، بغض النظر عن نوعها.
🗯 مثال: استخدام عناوين URL لتحديد الموارد، مثل: https://api.example.com/users/123 للوصول إلى بيانات المستخدم ذي المعرف 123.
🔹GET /products للحصول على قائمة المنتجات.
🔹POST /products لإضافة منتج جديد.
🔹PUT /products/{id} لتحديث منتج موجود.
🔹DELETE /products/{id} لحذف منتج.
2️⃣ نظام عميل-خادم (Client-Server)
بيفصل بين واجهة المستخدم (Client) والسيرفر (Server)، علشان كل طرف يتطور بشكل مستقل.
🗯 مثال: المتصفح بيتعامل مع الـ API، ومش لازم يعرف مصدر البيانات الأساسي (Database أو Cache… إلخ).
3️⃣ عدم حفظ الحالة (Stateless)
كل Request لازم يحتوي على كل المعلومات اللازمة لمعالجته، ومفيش حالة (Session) محفوظة على السيرفر.
🗯 مثال: كل طلب HTTP يحتوي على Access Token أو بيانات الاعتماد.
4️⃣ قابلية التخزين المؤقت (Cacheable)
الـ Server لازم يوضح هل الـ Response ينفع يتخزن مؤقتًا (Cache) ولا لأ.
🗯 مثال:Cache-Control: max-age=3600
⇠ الاستجابة دي تقدر تتخزن في الكاش لمدة ساعة.
5️⃣ نظام متعدد الطبقات (Layered System)
العميل مش لازم يعرف إذا كان بيتعامل مع الخادم الأصلي أو مع طبقة وسيطة زي Proxy أو Load Balancer.
🗯 مثال:
استخدام Layer فيها Load Balancer أو Security Gateway بدون ما العميل يعرف أو يتأثر.
6️⃣ تنفيذ الشيفرة عند الطلب (Code on Demand) – اختياري
السيرفر ممكن يبعث للعميل كود (زي JavaScript) ينفذه مؤقتًا.
🗯 مثال:
المتصفح يستقبل كود JavaScript من السيرفر يشغل في الـ UI بشكل ديناميكي.
✅ النتيجة:
لما الـ API يلتزم بالقيود دي:
🔹 بيبقى RESTful بشكل كامل
🔹 أسهل في التطوير والصيانة
🔹 بيحقق أداء عالي وقابلية للتوسع
🔹 مناسب جدًا للتطبيقات الكبيرة والموزعة