برزت FastAPI بسرعة كإطار عمل رائد لبناء واجهات برمجة التطبيقات في بايثون، بفضل أدائها العالي، والتوثيق التلقائي، وتلميحات الأنواع القوية. سواء كنت تنتقل من Flask أو تبدأ مشروعاً جديداً من الصفر، فإن فهم الآليات الأساسية لـ FastAPI أمر ضروري لكتابة كود قابل للصيانة وقابل للتوسع.
المفاهيم الأساسية والإعداد
تمثل مثيل فئة `FastAPI` أساس أي تطبيق FastAPI. يعمل هذا المثيل ككائن التطبيق الرئيسي الذي يتعامل مع التوجيه والتكوين. على عكس Flask، الذي يستخدم الزخارف (decorators) على نطاق واسع لكل شيء، تستفيد FastAPI من تلميحات الأنواع القياسية في بايثون لتعريف مخططات الطلب والاستجابة. يسمح هذا النهج بدعم أفضل لأدوات التطوير، بما في ذلك إكمال التعليمات البرمجية تلقائياً في بيئات التطوير المتكاملة (IDEs) والتحقق من صحة البيانات تلقائياً.
للبدء، تحتاج إلى تثبيت الإطار الخادم وخادم مناسب للإنتاج مثل Uvicorn. FastAPI نفسه هو مجرد مكتبة قياسية لتنفيذ واجهة بوابة الخادم غير المتزامن (ASGI)، لكنه يتكامل بسلاسة مع Uvicorn للتعامل مع الطلبات المتزامنة. يمكنك تثبيت التبعيات اللازمة باستخدام pip. بمجرد التثبيت، يمكنك إنشاء هيكل تطبيق أساسي يعمل كنقطة دخول لطلبات HTTP الخاصة بك.
تنفيذ التحقق من صحة البيانات باستخدام Pydantic
تتمثل إحدى أقوى نقاط قوة FastAPI في تكاملها مع Pydantic. يتيح لك Pydantic تعريف نماذج البيانات باستخدام تسميات الأنواع في بايثون، والتي تستخدمها FastAPI للتحقق تلقائياً من البيانات الواردة. هذا يعني أنك لست بحاجة إلى كتابة كود روتيني للتحقق مما إذا كان المستخدم قد قدم عدداً صحيحاً حيث كان يُتوقع سلسلة نصية، أو لضمان صحة عنوان البريد الإلكتروني.
من خلال تعريف نموذج Pydantic، فإنك تنشئ عقداً لواجهة برمجة التطبيقات الخاصة بك. على سبيل المثال، إذا كنت تبني نقطة نهاية للمستخدم، يمكنك تعريف مخطط `UserCreate`. ستقوم FastAPI تلقائياً بتحليل جسم الطلب بصيغة JSON، والتحقق من صحته مقابل المخطط، ورفع خطأ تحقق مفصل إذا كانت البيانات غير صحيحة. يقلل هذا من الأخطاء ويضمن أن منطق العمل الخاص بك يتعامل فقط مع أنواع البيانات الموثقة.
from pydantic import BaseModel, EmailStr
from typing import Optional
class UserBase(BaseModel):
username: str
email: EmailStr
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool = True
في هذا المثال، يضمن نوع `EmailStr` أن البريد الإلكتروني المقدم يطابق نمطاً محدداً للتعبيرات النمطية (regex). إذا وصل طلب يحتوي على بريد إلكتروني غير صالح، ستعيد FastAPI فوراً خطأ 422 (كيان غير قابل للمعالجة) مع رسالة واضحة، مما ينقذ تطبيقك من الانهيار أو معالجة بيانات خاطئة.
حقن التبعيات والتوجيه المتقدم
تطبق FastAPI نظام حقن التبعيات الذي يكون قوياً وبديهيًا في آن واحد. التبعيات هي أي دوال قابلة للاستدعاء (callables) تُرجع قيمة معينة مطلوبة من قبل نقطة النهاية الخاصة بك. يمكن أن تكون هذه الجلسات قاعدة البيانات، أو مصادقة المستخدم الحالي، أو إعدادات التكوين. من خلال فصل هذه المسؤوليات، تحافظ على معالجات نقاط النهاية نظيفة ومركزة على منطق العمل.
يمكنك تعريف التبعية كدالة بسيطة ثم طلبها كمعلمة في المسار الخاص بك. ستقوم FastAPI تلقائياً بالتعامل مع إنشاء التبعية، وتنفيذها، وتنظيفها. على سبيل المثال، يمكنك إنشاء تبعية `get_db` توفر جلسة قاعدة بيانات. يتم بعد ذلك حقن هذه الجلسة في نقاط النهاية الخاصة بك، مما يضمن أن كل طلب لديه وصول إلى اتصال قاعدة بيانات جديد ومكون بشكل صحيح.
from fastapi import Depends, FastAPI
app = FastAPI()
def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
return commons
هذا النمط قابل لإعادة الاستخدام بشكل كبير. إذا كنت بحاجة إلى إضافة معلمة جديدة إلى جميع نقاط النهاية المتعلقة بالعناصر، فأنت تقوم فقط بتحديث دالة `common_parameters`. هذا يعزز مبادئ عدم تكرار الكود (DRY) ويجعل واجهة برمجة التطبيقات الخاصة بك أسهل في الاختبار والصيانة.
الخاتمة
تقدم FastAPI نهجاً حديثاً وفعالاً وصديقاً للمطورين لبناء واجهات برمجة تطبيقات REST. من خلال الجمع بين سرعة بايثون غير المتزامن مع سلامة تلميحات الأنواع والتحقق من صحة Pydantic، يمكن للمطورين بناء أنظمة قوية بكود أقل. يعزز التوثيق التلقائي للإطار عبر واجهة Swagger UI وReDoc تجربة المطور بشكل أكبر، مما يجعل الاختبار والتكامل سلسين. مع اعتمادك لهذه الممارسات، ستجد أن الحفاظ على واجهة برمجة التطبيقات الخاصة بك وتوسعها يصبح أكثر قابلية للإدارة بشكل كبير.