لماذا يجب أن تبدأ في استخدام FastAPI الآن

مرحبا خابروفيتس! عشية بدء الدراسة في مجموعات الأساسية و المتقدمة دورات "المطور بيثون" ، قمنا بإعداد ترجمة أخرى مفيدة بالنسبة لك.












لطالما اشتهرت Python بتطوير تطبيقات الويب خفيفة الوزن بفضل أطر عمل رائعة مثل Flask و Django و Falcon والمزيد. نظرًا لمكانة Python الرائدة كلغة تعلم آلي ، فهي مفيدة بشكل خاص لنماذج التعبئة والتغليف وتقديمها كخدمة.



لسنوات ، كان Flask هو الأداة الأساسية لمثل هذه المهام ، ولكن في حال لم تسمع بعد ، فقد ظهر منافس جديد مكانه. FastAPI هو إطار عمل Python جديد نسبيًا مستوحى من سابقاته. يحسن وظائفهم ويصلح العديد من العيوب. تم بناء FastAPI أعلى Starlette وله الكثير من الميزات الرائعة.



في الآونة الأخيرة ، اكتسب شعبية كبيرة ، وبعد 8 أشهر الماضية كنت أعمل معه كل يوم ، يمكنني أن أقول بثقة أن كل الضجيج من حوله مبرر تمامًا. إذا لم تكن قد جربتها حتى الآن ، فقد جمعت خمسة أسباب لك لماذا لا يزال عليك التعرف عليها.



واجهة بسيطة لطيفة



جميع الأطر مجبرة على التوازن بين الوظيفة والحرية للمطور. جانغو قوي ولكنه عنيد جدا. من ناحية أخرى ، يعتبر Flask عالي المستوى بما يكفي لتوفير حرية التصرف ، ولكن الكثير يترك للمستخدم. FastAPI هو أقرب إلى Flask في هذا الصدد ، لكنه تمكن من تحقيق توازن صحي أكثر.



على سبيل المثال ، دعنا نرى كيف يحدد FastAPI نقطة نهاية.



from fastapi import FastAPI
from pydantic import BaseModel


class User(BaseModel):
    email: str
    password: str


app = FastAPI()


@app.post("/login")
def login(user: User):
    # ...
    # do some magic
    # ...
    return {"msg": "login successful"}


لتحديد المخطط ، يتم استخدام Pydantic ، وهي مكتبة Python رائعة بنفس القدر للتحقق من صحة البيانات. تبدو بسيطة بما فيه الكفاية ، ولكن هناك الكثير مما يحدث تحت الغطاء. يتم تفويض مسؤولية التحقق من صحة بيانات الإدخال إلى FastAPI. إذا تم إرسال طلب غير صحيح ، على سبيل المثال ، يحتوي حقل البريد الإلكتروني على قيمة نوع int، فسيتم إرجاع رمز الخطأ المقابل ، لكن التطبيق لن يتعطل ، مما يؤدي إلى ظهور خطأ خادم داخلي (500). وكلها مجانية تقريبًا.



مثال بسيط للتطبيق مع uvicorn:



uvicorn main:app


يمكن للتطبيق الآن قبول الطلبات. في هذه الحالة ، سيبدو الطلب كما يلي:



curl -X POST "http://localhost:8000/login" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"email\":\"string\",\"password\":\"string\"}"


إن التثليج على الكعكة هو التوليد التلقائي للوثائق وفقًا لـ OpenAPI باستخدام واجهة Swagger التفاعلية.





واجهة Swagger لتطبيق FastAPI



غير متزامن



أحد أكبر عيوب أطر عمل ويب Python WSGI مقارنة بنظيراتها في Node.js أو Go هو عدم القدرة على معالجة الطلبات بشكل غير متزامن. منذ تقديم ASGI ، لم تعد هذه مشكلة ، ويقوم FastAPI بتنفيذ هذه الإمكانية بالكامل. كل ما عليك فعله هو ببساطة الإعلان عن نقاط النهاية باستخدام الكلمة الأساسية غير المتزامنة مثل هذا:



@app.post("/")
async def endpoint():
    # ...
    # call async functions here with `await`
    # ...
    return {"msg": "FastAPI is awesome!"}


حقن التبعية



FastAPI لديه طريقة رائعة حقًا لإدارة التبعيات. على الرغم من أن المطورين ليسوا مجبرين على استخدام الحقن المضمن للتعامل مع التبعيات على نقاط النهاية ، يوصى بهذا بشدة.



على سبيل المثال ، لنقم بإنشاء نقطة نهاية حيث يمكن للمستخدمين التعليق على مقالات معينة.



from fastapi import FastAPI, Depends
from pydantic import BaseModel


class Comment(BaseModel):
    username: str
    content: str


app = FastAPI()


database = {
    "articles": {
        1: {
            "title": "Top 3 Reasons to Start Using FastAPI Now",
            "comments": []
        }
    }
}


def get_database():
    return database


@app.post("/articles/{article_id}/comments")
def post_comment(article_id: int, comment: Comment, database = Depends(get_database)):
    database["articles"][article_id]["comments"].append(comment)
    return {"msg": "comment posted!"}


FastAPI get_database في وقت التشغيل عند استدعاء نقطة النهاية ، بحيث يمكنك استخدام قيمة الإرجاع كما تراه مناسبًا. هناك (على الأقل) سببان وجيهان لذلك.



  1. يمكنك تجاوز التبعيات بشكل عام عن طريق تعديل القاموس app.dependency_overrides. هذا سيجعل الاختبار أسهل ويسخر من الأشياء.
  2. يمكن أن تقوم التبعية (في حالتنا get_database) بإجراء فحوصات أكثر تعقيدًا وتسمح لك بفصلها عن منطق الأعمال. المسألة مبسطة إلى حد كبير. على سبيل المثال، بحيث يمكنك بسهولة تنفيذ مصادقة المستخدم.


سهولة التكامل مع قواعد البيانات



مهما كان اختيارك ، سواء أكان SQL أو MongoDB أو Redis أو أي شيء آخر ، فلن يجبرك FastAPI على بناء تطبيقك حول قاعدة بيانات. إذا سبق لك العمل مع MongoDB من خلال Django ، فأنت تعلم كم يمكن أن يكون الأمر مؤلمًا. باستخدام FastAPI ، لا تحتاج إلى إجراء ربط إضافي ، لأن إضافة قاعدة البيانات إلى المكدس أمر سهل قدر الإمكان. (أو بشكل أكثر دقة ، سيتم تحديد حجم العمل بواسطة قاعدة البيانات التي تختارها ، وليس التعقيد الذي يأتي مع استخدام إطار عمل معين.)



بجدية ، انظر إلى هذا الجمال.



from fastapi import FastAPI, Depends

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker


engine = create_engine("sqlite:///./database.db")
Session = sessionmaker(bind=engine)


def get_db():
    return Session()


app = FastAPI()


@app.get("/")
def an_endpoint_using_sql(db = Depends(get_db)):
    # ...
    # do some SQLAlchemy
    # ...
    return {"msg": "an exceptionally successful operation!"}


هاهو! يمكنني بالفعل رؤيتك تكتب



pip install fastapi


في المحطة على جهاز الكمبيوتر الخاص بك.



دعم GraphQL



عندما تعمل باستخدام نموذج بيانات معقد ، يمكن أن يكون REST عقبة رئيسية. ليس الأمر رائعًا عندما يتطلب أدنى تغيير في المقدمة تحديث مخطط نقطة النهاية. في مثل هذه الحالات ، توفر لك GraphQL. في حين أن دعم GraphQL ليس شيئًا جديدًا على أطر عمل ويب Python ، فإن Graphene و FastAPI يعملان معًا بشكل جيد. ليست هناك حاجة إلى تثبيت أي ملحقات إضافية ، على سبيل المثال graphene_djangoلـ Django ، كل شيء سيعمل من البداية.



+1: وثائق ممتازة



بالطبع ، لا يمكن أن يكون إطار العمل رائعًا إذا كان يحتوي على وثائق ضعيفة. لقد كان أداء Django و Flask وآخرون جيدًا في هذا المجال ، و FastAPI ليس بعيدًا عن الركب. بالطبع ، نظرًا لأنه أصغر من ذلك بكثير ، لا يوجد كتاب واحد عنه حتى الآن ، لكنها مسألة وقت فقط.



إذا كنت تريد أن ترى FastAPI أثناء العمل ، فلدي دليل رائع لك. لقد كتبت تعليميًا مفصلاً يمكنك من خلاله نشر نموذج ML الخاص بك في Docker و Docker Compose و GitHub Actions!



للتلخيص ، سواء كنت تبحث عن إطار عمل سريع وخفيف الوزن للعمل مع نموذج التعلم العميق الخاص بك أو شيء أكثر تعقيدًا ، فإن FastAPI هو خيارك. أنا متأكد من أنه سيعمل من أجلك.






تعلم المزيد عن الدورات






All Articles