غالبًا ما يكون بناء واجهة برمجة تطبيقات REST مهمة ميكانيكية ، تتضمن الكثير من التصميم المعياري والبرمجة عن ظهر قلب. لحسن الحظ ، يمكن لأدوات مثل FastAPI أن تخفف الكثير من التفاصيل المملة.
باستخدام FastAPI ، يمكنك إنشاء واجهة برمجة تطبيقات REST فعالة وكاملة بسرعة لتطبيق CRUD الخاص بك. مع MongoDB كمصدر للبيانات ، سيرشدك هذا البرنامج التعليمي نحو إعداد واجهة برمجة التطبيقات الخاصة بك في أي وقت من الأوقات.
ما هو FastAPI؟
FastAPI هو إطار عمل ويب Python سريع ومفتوح المصدر لبناء واجهات برمجة التطبيقات. يوفر دعمًا مدمجًا للطلبات غير المتزامنة والتحقق التلقائي من البيانات والتوثيق التلقائي لنقاط نهاية API.
مزايا FastAPI على أطر عمل Python الأخرى
- FastAPI أسرع نسبيًا من الأطر الأخرى مثل Django و Flask. هذا لأن FastAPI يبني فوق asyncio ، وهي مكتبة إدخال / إخراج غير متزامنة لـ Python يمكنها معالجة الطلبات المتزامنة بسرعة أكبر.
- يوفر FastAPI طريقة نظيفة وبسيطة لبناء واجهات برمجة التطبيقات بأقل جهد لأنها تتطلب رمزًا أقل من Flask أو Django.
- أخيرًا ، يجعل FastAPI من السهل إنشاء وثائق لنقاط النهاية. يستخدم Swagger لإنتاج الوثائق التي يمكنك استخدامها لاختبار نقاط النهاية عن طريق تشغيل الطلبات وعرض الردود.
قم بإعداد قاعدة بيانات MongoDB
للبدء ، سوف تحتاج إلى إعداد قاعدة بيانات MongoDB محليًا. بدلاً من ذلك ، يمكنك اختيار الخيار الأسهل لـ إنشاء كتلة MongoDB في السحابة.
بعد ذلك ، باستخدام أداة واجهة المستخدم الرسومية MongoDB المثبتة ، البوصلة ، قم بإنشاء اتصال قاعدة البيانات. انقر على اتصال جديد زر وتوفير URI للاتصال لإنشاء اتصال مع خادم MongoDB الذي يعمل محليًا.
أخيرًا ، قم بإنشاء قاعدة بيانات جديدة ومجموعة جديدة للاحتفاظ ببيانات اختبار API الخاصة بك.
قم بإعداد خادم FastAPI
باستخدام Terminal ، قم بإنشاء مجلد مشروع ، وأدخل هذا الدليل الجديد.
يمكنك العثور على رمز هذا المشروع في ملف مستودع جيثب.
بعد ذلك ، تحقق من أنك تقوم بتشغيل Python الإصدار 3.6+. إذا لم يكن كذلك ، فقم بتثبيت أحدث بايثون إصدار.
بيثون - الإصدار
بعد ذلك ، قم بتثبيت Virtualenv لإنشاء بيئة تطوير افتراضية معزولة. يوصى بهذا بشدة لأنه يمكّنك من تجنب التعارضات ، خاصة إذا كنت تستخدم إصدارات مختلفة من الحزم لمشاريع مختلفة.
نقطة تثبيت virtualenv
بعد ذلك ، أنشئ بيئة افتراضية تسمى "venv" ضمن دليلك الحالي:
Virtualenv venv
أخيرًا ، قم بتنشيط البيئة الافتراضية.
# على نظام التشغيل Unix أو MacOS:
مصدر venv / بن / تفعيل
# على نظام Windows:
. \ venv \ Scripts \ تفعيل
بمجرد تهيئة البيئة الافتراضية ، قم بتثبيت حزم FastAPI و PyMongo و Uvicorn.
نقطة تثبيت fastapi pymongo uvicorn
PyMongo هي مكتبة مبنية على Python للعمل مع قاعدة بيانات MongoDB. يوفر واجهة برمجة تطبيقات تدعم جميع ميزات MongoDB ويسمح لك بالتفاعل مع MongoDB دون الحاجة إلى كتابة استعلامات MongoDB الأولية.
من ناحية أخرى ، فإن Uvicorn هو خادم ويب غير متزامن يعتمد على وحدة Python asyncio. ميزته الرئيسية هي إعادة تحميل خوادم FastAPI الخاصة بك أثناء التنقل. استخدام Uvicorn مشابه لـ العمل مع Nodemon.
قم بإنشاء خادم FastAPI
أخيرًا ، قم بإنشاء خادم FastAPI بسيط يستمع للحصول على الطلبات الواردة من المسار الرئيسي. في الدليل الجذر لمجلد مشروعك ، أنشئ ملف server.py وأضف الكود أدناه.
من fastapi يستورد FastAPI
التطبيق = FastAPI ()
@ app.get ("/")
غير متزامنdefبيت():
يعود {"رسالة": "مرحبا بالعالم"}
أخيرًا ، قم بتشغيل الأمر أدناه لتدوير خادم التطوير. سيخدم Uvicorn تطبيقك على المنفذ 8000.
خادم uvicon: التطبيق - إعادة التحميل
انطلق واعرض استجابة الخادم على متصفحك على http://localhost: 8000.
قم بإنشاء REST API مع عمليات CRUD
الآن قم ببناء واجهة برمجة تطبيقات REST التي تنفذ أساليب CRUD (إنشاء وقراءة وتحديث وحذف). في الدليل الجذر لمجلد المشروع الخاص بك ، قم بإنشاء أربعة مجلدات: التكوين والنماذج والمسارات والمخططات.
├── التكوين
├── موديلات
├── الطرق
├── المخططات
└── server.py
1. تكوين اتصال قاعدة البيانات
في دليل التكوين ، أنشئ ملفًا جديدًا ، db.py ، وأضف الكود أدناه.
من بيمونغو يستورد MongoClient
db_connection = MongoClient ("mongodb: // localhost: 27017")
db = db_connection.database_name
المجموعة = ديسيبل ["collection_name"]
- استخدم طريقة MongoClient () لإنشاء اتصال بقاعدة بيانات MongoDB. يأخذ سلسلة اتصال URI كوسيطة تحدد المضيف والمنفذ لخادم MongoDB.
- يحدد المتغيران قاعدة البيانات والمجموعة في خادم MongoDB الذي يجب على الخادم الوصول إليه.
2. تحديد نموذج بيانات
سيحدد هذا النموذج بنية بياناتك في قاعدة البيانات بما في ذلك الحقول وأنواع البيانات.
في دليل النموذج ، أنشئ ملفًا جديدًا ، user_model.py ، وأضف الكود أدناه.
من مائي يستورد نموذج القاعدة
فصلمستخدم(نموذج القاعدة):
الاسم: شارع
الدور: شارع
- يقوم الكود أعلاه بإنشاء فئة تسمى المستخدم ، وهي فئة فرعية من فئة BaseModel من مكتبة Pydantic. تحتوي فئة المستخدم على حقلين ، الاسم والدور مع تعيين أنواع البيانات الخاصة بهم إلى سلاسل.
- يمكنك استخدام مكتبة Pydantic مع FastAPI لإنشاء نماذج البيانات. يمكنك أيضًا استخدامه للتحقق من صحة البيانات وتسلسلها (JSON إلى Python) وإلغاء تسلسلها (Python إلى JSON).
3. تحديد مخطط البيانات
من نموذج البيانات الذي تم إنشاؤه ، يمكنك تحديد مخطط البيانات الخاصة بك. في دليل المخططات ، أنشئ ملفًا جديدًا: user_schema.py ، وأضف الكود أدناه.
defuser_serializer(مستخدم) -> ديكت:
يعود {
'بطاقة تعريف': str (مستخدم ["_بطاقة تعريف"]),
'اسم':مستخدم["اسم"],
'دور':مستخدم["دور"]
}
defusers_serializer(المستخدمون) -> قائمة:
يعود [user_serializer (مستخدم) ل مستخدم في المستخدمين]
4. تحديد مسارات API
أخيرًا ، حدد مسارات عمليات CRUD المختلفة.
في دليل التوجيهات ، أنشئ ملفًا جديدًا: user_routes.py ، وأضف الكود أدناه.
أضف البيانات بطريقة النشر
قم بإنشاء مسار النشر لإضافة البيانات.
من fastapi يستورد جهاز التوجيه
من النماذج يستورد مستخدم
من مخطط المستخدم يستورد users_serializer
من بس يستورد معرف الكائن
من config.db يستورد مجموعةالمستخدم = APIRouter ()
@ user.post ("/")
غير متزامنdefcreate_user(المستخدم: المستخدم):
_id = collection.insert_one (ديكت (مستخدم))
user = users_serializer (collection.find ({"_بطاقة تعريف": _id.inserted_id}))
يعود {"حالة": "نعم","بيانات": مستخدم}
- يوفر FastAPI طريقة APIRouter () التي تحدد كائن جهاز التوجيه الذي يوفر واجهة لتقديم طلبات API إلى الخادم.
- حدد مسار نشر يقوم بإنشاء كائن مستخدم جديد في قاعدة البيانات عن طريق إدراج البيانات في المجموعة بعد إجراء تسلسل لها. بعد ذلك ، قم بتخزين وتمرير inserted_id للعثور على البيانات المرتبطة في المجموعة ، وأخيرًا ، قم بإرجاع الحالة "Ok" مع البيانات الموجودة في الاستجابة ، إذا كان طلب النشر ناجحًا.
- يتم تحديد أساليب insert_one والعثور بواسطة عميل PyMongo.
الآن ، أضف الكود أدناه إلى server.py لتهيئة المسارات.
من الطرق .user_routes يستورد مستخدم
app.include_router (المستخدم)
انطلق واختبر مسار النشر على متصفحك باستخدام أداة Swagger UI API التي يوفرها FastAPI.
قراءة البيانات باستخدام طريقة Get
بعد تحديد مسار البريد وتهيئة المسارات ، حدد باقي المسارات الأخرى.
@ user.get ("/")
غير متزامنdeffind_all_users():
users = users_serializer (collection.find ())
يعود {"حالة": "نعم","بيانات": المستخدمين}
@ user.get ("/ {id}")
غير متزامنdefget_one_user(المعرف: str):
user = users_serializer (collection.find ({"_بطاقة تعريف": معرف الكائن (معرف)}))
يعود {"حالة": "نعم","بيانات": مستخدم}
حدد مسارين للحصول على جميع البيانات الموجودة في المجموعة واسترداد بيانات محددة من المجموعة بناءً على المعرف.
تحديث البيانات بطريقة الوضع
قم بإنشاء مسار الوضع لتحديث البيانات المخزنة في قاعدة البيانات.
@ user.put ("/ {id}")
غير متزامنdefupdate_user(المعرف: str ، المستخدم: المستخدم):
collection.find_one_and_update (
{
"_بطاقة تعريف": معرف الكائن (معرف)
},
{
"مجموعة $": ديكت (مستخدم)
})
user = users_serializer (collection.find ({"_بطاقة تعريف": معرف الكائن (معرف)}))
يعود {"حالة": "نعم","بيانات": مستخدم}
تستخدم طريقة put المعرّف للعثور على البيانات المحددة في المجموعة وتحديث قيمة الحقول في المستند بالبيانات الجديدة التي تم تمريرها من API. يمكنك بعد ذلك البحث عن البيانات المحدثة حسب المعرف وإعادتها في استجابة API.
حذف البيانات باستخدام طريقة الحذف
قم بإنشاء مسار الحذف لحذف البيانات المخزنة في قاعدة البيانات.
@ user.delete ("/ {id}")
غير متزامنdefمسح المستخدم(المعرف: str):
collection.find_one_and_delete ({"_بطاقة تعريف": معرف الكائن (معرف)})
users = users_serializer (collection.find ())
يعود {"حالة": "نعم","بيانات": []}
يأخذ مسار الحذف معرف المستند المحدد الذي تريد حذفه من المجموعة.
إنشاء واجهات برمجة تطبيقات REST باستخدام FastAPI
يوفر FastAPI طريقة رائعة لبناء واجهات برمجة تطبيقات الويب Python الخلفية بشكل ملائم. أدواته المدمجة لتكامل قاعدة البيانات وإنتاج API التلقائي تجعل العملية بسيطة.
يمكنك حتى اتخاذ هذه الخطوة إلى الأمام وإنشاء تطبيقات كاملة. حاول دمج عميل الواجهة الأمامية باستخدام تقنيات شائعة مثل React أو Angular أو Vue.