ما هي الـ API

أولاً: ما هي الـ API؟

API اختصار لـ:
Application Programming Interface
واجهة برمجية للتواصل بين “شيئين”:

  • برنامج يتواصل مع برنامج ثاني
  • فرونت إند يتواصل مع باك إند
  • تطبيق موبايل يتواصل مع سيرفر
  • أو حتى كودك يتواصل مع مكتبة جاهزة

فـ API كلمة عامّة جدًا، مش مرتبطة بالويب فقط.

أمثلة بسيطة:

  1. مكتبة في جافاسكربت:
    لما تستخدم Math.random()
    هذا جزء من API محرك جافاسكربت.
  2. متصفح الويب:
    window.localStorage – هذا API يوفّره لك المتصفح للتخزين المحلي.
  3. Web API (http):
    لما تكتب في React: axios.get("https://api.example.com/users") هذا تستدعي Web API (واجهة برمجية عبر HTTP).

إذًا:

API = أي طريقة منظمة تخليك تتواصل مع نظام/كود آخر.

ثانياً: ما هي REST API؟

REST اختصار لـ:
Representational State Transfer

هو أسلوب / نمط تصميم (Architecture Style) لبناء Web APIs باستخدام HTTP.

يعني:

REST API = نوع معيّن من الـ Web API يتبع قواعد معيّنة اسمها REST.

مو كل API على الويب يعتبر REST،
لكن كل REST API هو API (زي مربع ومستطيل: كل مربع مستطيل، لكن مو كل مستطيل مربع).

أهم أفكار REST (بشكل مبسّط للمبتدئين)
1️⃣ كل شيء يُعتبر “موارد” (Resources)

الموارد = أشياء في النظام:

  • /users → المستخدمين
  • /posts → المقالات
  • /courses → الكورسات
  • /students → الطلاب … إلخ.

كل مورد له URI واضح:

  • جميع المستخدمين:
    GET /users
  • مستخدم واحد:
    GET /users/5
2️⃣ استخدام الـ HTTP Methods بشكل منطقي

في REST نستغل verbs اللي في HTTP:

  • GET → قراءة بيانات (ما يغيّر شيء)
  • POST → إنشاء جديد
  • PUT → تعديل كامل
  • PATCH → تعديل جزئي
  • DELETE→ حذف

مثال على REST API للكورسات:

العمليةالـ methodالـ URL
جلب كل الكورساتGET/courses
جلب كورس معيّنGET/courses/10
إنشاء كورس جديدPOST/courses
تعديل كورس بالكاملPUT/courses/10
تعديل جزء من كورسPATCH/courses/10
حذف كورسDELETE/courses/10

لو API ما يمشي على هذا الأسلوب، غالبًا ليس RESTful بالكامل.

3️⃣ Stateless (بدون حفظ حالة على السيرفر)
  • كل طلب من العميل للسيرفر يحمل كل المعلومات اللي يحتاجها السيرفر لفهمه:
    • توكن، ID، بيانات…
  • السيرفر ما يعتمد على إنه “فاكر” جلسة قديمة في الذاكرة لكل مستخدم.

هذا يسهل التوسّع (Scalability).

4️⃣ استخدام تنسيقات قياسية للبيانات (غالبًا JSON)

مثلاً ردّ REST API:

{
  "id": 1,
  "title": "Learn React",
  "body": "React basics...",
  "userId": 5
}
JavaScript
ثالثاً: إذًا… ما الفرق عمليًا بين API و REST API؟
API (بشكل عام):
  • مفهوم واسع.
  • ممكن تكون:
    • مكتبة جافاسكربت
    • دوال في نظام التشغيل
    • WebSocket API
    • SOAP API
    • GraphQL API
    • REST API
  • مو مرتبط ببروتوكول معين أو شكل معيّن.
REST API:
  • نوع محدّد من Web API (يعمل فوق HTTP).
  • يتبع مبادئ REST:
    • موارد + URIs واضحة
    • استخدام HTTP methods بشكل منطقي (GET/POST/PUT/DELETE…)
    • غالبًا يرجع JSON
    • Stateless
رابعاً: أمثلة تفرّق لك الصورة
🔹 مثال على Web API غير REST

رابط مثل:

POST /doAction
Body: { "operation": "getUser", "id": 5 }
JavaScript

أو:

POST /users/getAll
POST /users/deleteUser
JavaScript

هنا:

  • كل شيء يتم بـ POST
  • الـ URLs أفعال (getAll, deleteUser)
  • هذا يعمل كـ API لكنه مو RESTful.
🔹 مثال على REST API أنظف
GET    /users          → رجّع كل المستخدمين
GET    /users/5        → رجّع المستخدم 5
POST   /users          → أنشئ مستخدم جديد
DELETE /users/5        → احذف المستخدم 5
JavaScript

هنا:

  • الـ URLs أسماء موارد (users).
  • الأفعال في HTTP method نفسه، مو في الـ URL.
  • هذا نسميه RESTful API.
خامساً: في كلام المطوّرين اليومي

كثير ناس تقول:

“عملت API باللارافيل”
وتقصد غالبًا REST API أو شيء قريب منه.

ففي الاستخدام اليومي:

  • كلمة API غالبًا يقصدوا بها Web API.
  • وREST API يقصدوا بها Web API لكن مصمم وفق REST.

لكن لو نتكلم بالمعنى الدقيق:

  • API = مصطلح عام.
  • REST API = نوع محدد من API (Web + REST style).

لو تحب بعدها أقدر:

  • أوريك كيف تصمم REST API بسيط في Laravel لمسار /posts.
  • أو كيف تستهلك REST API من React باستخدام Axios (GET/POST/PUT/DELETE) كتصوّر كامل للي تعلمته.