في المشهد المتطور بسرعة لتطوير الويب بلغة بايثون، برزت
FastAPI كإطار عمل مميز لبناء واجهات برمجة تطبيقات عالية الأداء وسهلة التعلم. صممها سيباستيان راميريز، وتستفيد FastAPI من تلميحات الأنواع الحديثة في بايثون لتقديم التحقق التلقائي من البيانات، والتسلسل، والتوثيق التفاعلي. بالنسبة للمطورين من المستوى المتوسط والمتقدم، يعد فهم القوى المعمارية لـ FastAPI أمرًا حاسمًا لبناء خدمات خلفية قابلة للتطوير، وقابلة للصيانة، وقوية.
لماذا تختار FastAPI؟
تم بناء FastAPI على Starlette لأجزاء الويب وPydantic للتحقق من صحة البيانات. يوفر هذا المزيج عدة مزايا مميزة مقارنة بالأطر التقليدية مثل Flask أو Django REST Framework:
1. **أداء عالي**: قابل للمقارنة مع NodeJS وGo، بفضل التنفيذ الفعال لـ Starlette وPydantic.
2. **دعم غير المتزامن (Async)**: دعم أصلي للرموز غير المتزامنة، مما يتيح عمليات الإدخال/الإخراج غير الحظرية، وهي ضرورية للتعامل مع الطلبات عالية التزامن.
3. **توثيق تلقائي**: يدمج واجهة Swagger UI (OpenAPI 3.0) وReDoc بشكل افتراضي، مما يوفر واجهة سهلة الاستخدام لاختبار وتوثيق واجهات برمجة التطبيقات.
4. **أمان الأنواع**: من خلال الاستفادة من تلميحات الأنواع في بايثون، يمكن لـ FastAPI التقاط الأخطاء مبكرًا وتوفير دعم ممتاز لبيئات التطوير المتكاملة (IDE)، مما يقلل بشكل كبير من أخطاء وقت التشغيل.
إعداد بيئة العمل
قبل الغوص في الكود، تأكد من تثبيت Python 3.7 أو إصدار أحدث. أنشئ بيئة افتراضية لإدارة التبعيات وقم بتثبيت FastAPI وUvicorn (خادم ASGI):
pip install fastapi uvicorn
بمجرد التثبيت، أنت جاهز لإنشاء نقطة النهاية الأولى الخاصة بك. إليك مثال بسيط يوضح التوجيه الأساسي ونمذجة الاستجابة:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = False
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "message": "Item created"}
في هذا الجزء من الكود، تستخدم الفئة
Item مكتبة Pydantic لتعريف الهيكل المتوقع لجسم الطلب. تقوم FastAPI تلقائيًا بالتحقق من صحة بيانات JSON الواردة مقابل هذا المخطط. إذا لم تتطابق البيانات (على سبيل المثال، تم تقديم سلسلة نصية حيث كان يُتوقع رقمًا عشريًا)، فإن FastAPI تعيد خطأ تحقق مفصل تلقائيًا.
حقن التبعيات: قلب FastAPI
إحدى أقوى ميزات FastAPI هي نظام حقن التبعيات الخاص بها. يتيح لك هذا فصل منطق العمل الخاص بك عن نقاط نهاية واجهة برمجة التطبيقات، مما يعزز نظافة الكود وإعادة استخدامه. يمكن استخدام التبعيات لجلسات قواعد البيانات، أو عمليات التحقق من المصادقة، أو إعدادات التكوين.
فكر في سيناريو تحتاج فيه إلى التحقق من مصادقة المستخدم قبل الوصول إلى موارد محددة. يمكنك إنشاء دالة تبعية تستخرج وتتحقق من صحة رمز المستخدم:
from fastapi import Depends, HTTPException, status
def get_current_user(token: str = Depends(oauth2_scheme)):
user = decode_token(token)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication credentials",
headers={"WWW-Authenticate": "Bearer"},
)
return user
@app.get("/secure-data")
def read_secure_data(current_user: User = Depends(get_current_user)):
return {"message": f"Access granted for {current_user.username}"}
من خلال الإعلان عن
current_user: User = Depends(get_current_user) في دالة تشغيل المسار، تقوم FastAPI تلقائيًا باستدعاء
get_current_user، ونقل النتيجة إلى نقطة النهاية، والتعامل مع أي استثناءات يتم طرحها أثناء العملية. هذا يبقي منطق نقطة النهاية مركّزًا على متطلبات العمل الأساسية.
البرمجة غير المتزامنة
تدعم FastAPI كلًا من الدوال القياسية وغير المتزامنة. بالنسبة للمهام المرتبطة بالإدخال/الإخراج مثل استعلامات قواعد البيانات أو استدعاءات واجهات برمجة التطبيقات الخارجية، يُنصح بشدة باستخدام
async def. يتيح ذلك للخادم التعامل مع طلبات متعددة بشكل متزامن دون حظر حلقة الأحداث.
import httpx
from fastapi import FastAPI
app = FastAPI()
@app.get("/fetch-data")
async def fetch_data():
async with httpx.AsyncClient() as client:
response = await client.get("https://api.example.com/data")
return response.json()
في هذا المثال، يضمن كتلة
async with إغلاق عميل HTTP بشكل صحيح، بينما يمنع
await الخيط من الحظر أثناء انتظار الاستجابة.
الخاتمة
تمثل FastAPI قفزة كبيرة إلى الأمام في تطوير الويب بلغة بايثون. إن مزيجها من السرعة وسهولة الاستخدام والميزات القوية مثل التحقق التلقائي وحقن التبعيات يجعلها خيارًا مثاليًا لتطوير واجهات برمجة تطبيقات REST الحديثة. من خلال الاستفادة من تلميحات الأنواع والبرمجة غير المتزامنة، يمكن للمطورين بناء تطبيقات ليست فقط قوية وآمنة، ولكن أيضًا عالية الأداء.
سواء كنت تبني خدمة مصغرة صغيرة أو خلفية مؤسسية معقدة، توفر FastAPI الأدوات اللازمة للتوسع بكفاءة. ابدأ بالتجربة مع تلميحات الأنواع وحقن التبعيات اليوم لإطلاق العنان للإمكانات الكاملة لمشاريع بايثون الخاصة بك.