أحمد حايس
الرئيسيةمن أناالدوراتالمدونةسوق الأوامرالمناهج والباقاتالشركاء
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • المناهج والباقات
  • سوق الأوامر
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالمناهجالمدونةالدخول
How To Make It

اعمل أول REST API بـ FastAPI في بايثون في أقل من 30 سطر

مبتدئ8 يوليو 20265 دقائق قراءة
اعمل أول REST API بـ FastAPI في بايثون في أقل من 30 سطر

هذا المقال لمستوى: مبتدئ. لو دي أول مرة تسمع كلمة API، أو كتبت شوية بايثون بس عمرك ما بنيت سيرفر، انت في المكان الصح. مش هنفترض إنك تعرف حاجة عن الويب مسبقًا.

في آخر المقال هيكون عندك سيرفر بايثون شغّال بيرد على طلبات من النت، بيقرا ويحفظ بيانات، وبيولّد لنفسه صفحة توثيق تفاعلية — كل ده في أقل من 30 سطر كود.

اعمل أول REST API بـ FastAPI في بايثون

يعني إيه API أصلًا؟ (بمثال بسيط الأول)

تخيّل إنك قاعد في مطعم. انت مش بتدخل المطبخ وتطبخ بنفسك. انت بتنادي النادل، تقوله "عايز طبق كذا"، هو بيروح للمطبخ ويرجعلك بالأكل جاهز. انت معندكش فكرة إزاي اتطبخ، ومش محتاج تعرف.

الـ API هو النادل ده بالظبط. برنامج تاني (تطبيق موبايل مثلًا) بيقوله "هات لي بيانات المنتج رقم 5"، والـ API بيروح يجيبها من قاعدة البيانات ويرجّعها. الطرفين ما بيعرفوش تفاصيل بعض، بس بيتفقوا على طريقة الكلام.

دلوقتي التعريف العلمي: REST API هو واجهة بتخلّي برنامجين يتكلموا عبر بروتوكول HTTP باستخدام أفعال قياسية (GET للقراءة، POST للإضافة، PUT للتعديل، DELETE للحذف)، وكل مورد (منتج، مستخدم) له عنوان URL ثابت. النتيجة بترجع غالبًا كـ JSON، وهو صيغة نصية خفيفة كل اللغات بتفهمها.

ليه FastAPI بالذات؟

فيه أكتر من إطار في بايثون لبناء APIs: Django وFlask وFastAPI. تلاتتهم شغّالين، بس لكل واحد مقايضة.

استخدم FastAPI لو عايز تبدأ بسرعة وتكسب أداء عالي وتوثيق تلقائي. التكلفة: هتحتاج تفهم فكرة الـ type hints في بايثون، وإنه async بطبيعته. المكسب: التحقق من البيانات بيتعمل لوحده، وصفحة التوثيق بتتبني من غير ما تكتب سطر زيادة. حسب قياسات TechEmpower، FastAPI فوق Uvicorn بيقدر يخدم عشرات الآلاف من الطلبات في الثانية على سيرفر متوسط — أسرع بمراحل من Flask التقليدي المتزامن.

الخطوات: من صفر لسيرفر شغّال

  1. ثبّت المكتبة. افتح الترمنال واكتب الأمر ده. هو بيجيب FastAPI ومعاه سيرفر Uvicorn اللي هيشغّل الكود.
Bash
pip install "fastapi[standard]"
  1. اكتب ملف اسمه main.py. ده كل الكود المطلوب: endpoint بيقرا منتج، وendpoint بيحفظ منتج.
Python
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# قاعدة بيانات مبسطة في الذاكرة (للتعلّم فقط)
products = {1: {"name": "كيبورد", "price": 350}}

# شكل البيانات المطلوبة عند الحفظ
class Product(BaseModel):
    name: str
    price: float

@app.get("/products/{product_id}")
def get_product(product_id: int):
    return products.get(product_id, {"error": "المنتج غير موجود"})

@app.post("/products/{product_id}")
def save_product(product_id: int, product: Product):
    products[product_id] = product.dict()
    return {"saved": product_id, "data": product}
  1. شغّل السيرفر. الأمر ده بيقلّع Uvicorn في وضع التطوير مع إعادة التشغيل التلقائي لما تعدّل الكود.
Bash
fastapi dev main.py

النتيجة المتوقعة: هيطبعلك سطر فيه http://127.0.0.1:8000. السيرفر دلوقتي شغّال.

مخطط تدفق الطلب في FastAPI من CLIENT إلى FastAPI ثم JSON

افتكر: إيه اللي بيحصل فعلاً؟

لما المتصفح بيطلب GET /products/1، Uvicorn بيستقبل الطلب ويسلّمه لـ FastAPI. FastAPI بيقرا الرقم من الرابط، بيتأكد إنه فعلًا رقم صحيح، وبينده الدالة المناسبة. الدالة بترجّع dictionary، وFastAPI بيحوّله JSON ويبعته للمتصفح. لو بعت رقم غلط زي /products/abc، FastAPI بيرد تلقائيًا بخطأ 422 من غير ما تكتب أي تحقق بنفسك.

الجزء الممتع: التوثيق التفاعلي المجاني

افتح في المتصفح http://127.0.0.1:8000/docs. هتلاقي صفحة Swagger UI كاملة، فيها كل الـ endpoints، وتقدر تجرّبها بزرار "Try it out" من غير ما تكتب سطر curl. الصفحة دي اتبنت لوحدها من الـ type hints اللي كتبتها. ده أكبر سبب عملي لاختيار FastAPI.

سيناريو واقعي

لو عندك تطبيق موبايل لمتجر صغير، وكل شاشة محتاجة تجيب أسعار المنتجات، الطريقة الغلط إنك تكتب كود اتصال بقاعدة البيانات جوّه كل شاشة. الطريقة دي بتفشل أول ما تغيّر شكل الجدول — هتضطر تعدّل كل الشاشات. البديل: endpoint واحد زي اللي فوق، والموبايل بيناديه. لو غيّرت قاعدة البيانات، بتعدّل مكان واحد بس.

الـ trade-offs اللي لازم تعرفها

القاعدة اللي في الذاكرة (products) هنا للتعلّم فقط. أول ما توقّف السيرفر، البيانات بتضيع. في الإنتاج بتربطه بقاعدة حقيقية زي PostgreSQL. المكسب من دلوقتي: فهمت الفكرة في دقيقتين. الثمن: لسه ناقص طبقة تخزين دائم.

الافتراض هنا إن عندك Python 3.8 أو أحدث، وإن الحِمل المتوقع صغير لمتوسط. لو هتخدم ملايين الطلبات، هتحتاج تفهم async/await وربط قاعدة بيانات غير متزامنة، وده موضوع أكبر من مقال البداية.

متى لا تستخدم FastAPI

لو مشروعك موقع محتوى بصفحات HTML كاملة بتترسم من السيرفر (زي مدوّنة أو متجر تقليدي بصفحات)، Django بإطاره الجاهز للـ templates والـ admin أنسب. ولو الحاجة اللي عايزها مجرد سكربت بيشتغل مرة، مش محتاج API من الأساس — API معناه إن فيه أكتر من برنامج محتاجين يتكلموا.

الخطوة التالية

انسخ كود main.py اللي فوق، شغّله بـ fastapi dev main.py، وافتح /docs. جرّب تبعت POST لمنتج جديد من زرار "Try it out"، وبعدها اعمل GET عليه وشوف إنه اتحفظ. لو ظهرت لك رسالة خطأ حمرا في الترمنال، دي أول خطوة حقيقية في التعلّم — اقرا آخر سطر فيها، هو بيقولك المشكلة بالظبط.

المصادر

  • التوثيق الرسمي لـ FastAPI: fastapi.tiangolo.com (قسم Tutorial - User Guide).
  • توثيق Uvicorn الرسمي: www.uvicorn.org.
  • توثيق Pydantic للتحقق من البيانات: docs.pydantic.dev.
  • قياسات الأداء المقارنة: TechEmpower Web Framework Benchmarks (www.techempower.com/benchmarks).
  • مرجع أفعال HTTP (GET/POST/PUT/DELETE): MDN Web Docs - HTTP methods (developer.mozilla.org).

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة