إعداد مشروع FastAPI ونقطة النهاية الأولى
ثبّت FastAPI وأنشئ مشروعاً واكتب أول نقطة نهاية GET لك
إعداد مشروع FastAPI ونقطة النهاية الأولى درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
ما هي FastAPI؟
FastAPI إطار عمل حديث للويب في Python لبناء REST APIs. وتوفّر وثائق OpenAPI تلقائية، ونماذج للطلبات والاستجابات مع التحقق من الأنواع عبر Pydantic، وأداءً أصيلًا للعمليات غير المتزامنة.
# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello, FastAPI"}تشغيل الخادم
شغّل التطبيق باستخدام uvicorn. يعيد الخيار --reload التشغيل تلقائيًا عند تغيير الشيفرة أثناء التطوير.
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health(): return {"status": "ok"}
# Terminal:
# uvicorn main:app --reload
# → http://127.0.0.1:8000
# → http://127.0.0.1:8000/docs (Swagger UI)أساليب HTTP
زيّن دوال المسارات باستخدام @app.get أو @app.post أو @app.put أو @app.delete أو @app.patch.
from fastapi import FastAPI
app = FastAPI()
@app.get("/items")
def list_items(): return []
@app.post("/items")
def create_item(): return {"id": 1}
@app.delete("/items/{item_id}")
def delete_item(item_id: int): return {"deleted": item_id}معاملات المسار
صرّح بمعاملات المسار في نص المسار باستخدام {name}، وباعتبارها وسيطات للدالة مع تعليقات الأنواع.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id, "name": "Alice"}
# GET /users/42 → {"user_id": 42, "name": "Alice"}معاملات الاستعلام
تصبح معاملات الدالة غير الموجودة في المسار معاملات استعلام.
from fastapi import FastAPI
app = FastAPI()
@app.get("/items")
def list_items(skip: int = 0, limit: int = 10, q: str | None = None):
return {"skip": skip, "limit": limit, "q": q}
# GET /items?skip=5&limit=20&q=searchجسم الطلب باستخدام Pydantic
استخدم BaseModel من Pydantic بوصفه نوع المعامل لتعريف جسم طلب JSON والتحقق منه.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
in_stock: bool = True
@app.post("/items")
def create_item(item: Item):
return {"received": item.model_dump()}أخطاء التحقق في Pydantic
إذا لم يطابق جسم الطلب المخطط، تُرجع FastAPI تلقائيًا استجابة 422 Unprocessable Entity مع رسالة خطأ مفصلة.
# POST /items with body {"name": 123}
# → HTTP 422 Unprocessable Entity
# {
# "detail": [
# {
# "type": "string_type",
# "loc": ["body","name"],
# "msg": "Input should be a valid string"
# }
# ]
# }نماذج الاستجابة
استخدم response_model= لتعريف ما تعيده نقطة النهاية. تتحقق FastAPI من الاستجابة وتستبعد الحقول الإضافية.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserOut(BaseModel):
id: int
name: str
@app.get("/users/{uid}", response_model=UserOut)
def get_user(uid: int):
return {"id": uid, "name": "Alice", "password": "secret"} # password filtered outرموز الحالة
عيّن رمز حالة النجاح الافتراضي باستخدام status_code=. واستورد الرموز الشائعة من fastapi.status.
from fastapi import FastAPI, status
app = FastAPI()
@app.post("/items", status_code=status.HTTP_201_CREATED)
def create_item():
return {"id": 1}
# HTTP 201 Created is returned on successHTTPException
ارفع HTTPException لإرجاع استجابة خطأ مع رمز حالة مخصص ورسالة تفصيلية.
from fastapi import FastAPI, HTTPException
app = FastAPI()
fake_db = {1: "Alice"}
@app.get("/users/{uid}")
def get_user(uid: int):
if uid not in fake_db:
raise HTTPException(status_code=404, detail="User not found")
return {"name": fake_db[uid]}التوثيق التلقائي
تنشئ FastAPI تلقائيًا Swagger UI في /docs وReDoc في /redoc اعتمادًا على تعليقات المسارات التوضيحية.
# After starting with uvicorn:
# http://localhost:8000/docs — Swagger UI (try the API live)
# http://localhost:8000/redoc — ReDoc (clean docs view)
# http://localhost:8000/openapi.json — raw OpenAPI schemaتحقق سريع
كيف تصرّح بمعامل مطلوب لجسم طلب JSON في FastAPI؟
مراجعة
مسارات FastAPI هي دوال مزينة: معاملات المسار في عنوان URL، ومعاملات الاستعلام كوسيطات ذات أنواع، وأجسام الطلبات كنماذج Pydantic. ارفع HTTPException عند حدوث الأخطاء. وتُنشأ Swagger UI تلقائيًا في /docs.
الأسئلة الشائعة
هل درس «إعداد مشروع FastAPI ونقطة النهاية الأولى» مجاني؟
نعم — نص درس «إعداد مشروع FastAPI ونقطة النهاية الأولى» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «إعداد مشروع FastAPI ونقطة النهاية الأولى»؟
ثبّت FastAPI وأنشئ مشروعاً واكتب أول نقطة نهاية GET لك تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «إعداد مشروع FastAPI ونقطة النهاية الأولى»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد مشروع FastAPI ونقطة النهاية الأولى
- معاملات المسار ومعاملات الاستعلام وأجسام الطلبات
- حقن الاعتماديات والمصادقة
- نقاط النهاية غير المتزامنة وتكامل قواعد البيانات