الشعار مأخوذ من مستودع Github FastAPI
FastAPI هو إطار ويب جديد نسبيًا مكتوب بلغة برمجة Python لإنشاء واجهة برمجة تطبيقات REST (وإذا جربت بجد ، ثم GraphQL) بناءً على ميزات Python 3.6+ الجديدة ، مثل: تلميحات الكتابة ، عدم التزامن الأصلي (asyncio) ). من بين أشياء أخرى ، يتكامل FastAPI بإحكام مع مخطط OpenAPI ويقوم تلقائيًا بإنشاء وثائق واجهة برمجة التطبيقات من خلال Swagger و ReDoc
ويستند FastAPI على Starlette و Pydantic .
Starlette هو إطار ASGI الصغير لكتابة تطبيقات الويب.
Pydantic - مكتبة لتحليل والتحقق من صحة البيانات بناءً على تلميحات بايثون.
ماذا يقولون عن FastAPI؟
"[...] أستخدم FastAPI غالبًا في الأيام الأخيرة. [...] بالتأكيد أخطط لاستخدامه في جميع خدمات ML لفريقي في Microsoft. بعضها يندمج في Windows وبعض منتجات Office."
كبير خان - مايكروسوفت ( المرجع )
"إذا كنت تريد معرفة إطار عمل آخر لكتابة واجهة برمجة تطبيقات REST ، فقم بإلقاء نظرة على FastAPI [...] إنه سريع وسهل الاستخدام والتعلم. [...]"
"الآن نستخدم FastAPI لواجهات برمجة التطبيقات لدينا [...] أعتقد أنك ستحبه! [...]"
إيناس مونتاني - ماثيو هونيبال - مؤسسو انفجار منظمة العفو الدولية - منشئو سبأ ( المرجع ) - ( المرجع )
تم إنشاء API الحد الأدنى باستخدام FastAPI
سأحاول أن أوضح لك كيفية إنشاء واجهة برمجة تطبيقات بسيطة ، ولكن في نفس الوقت مع وثائق للمطورين. سنكتب مولد عبارة عشوائية!
تثبيت المتطلبات الأساسية
pip install wheel -U pip install uvicorn fastapi pydantic
وحدة جديدة!
Uvicorn هو خادم ويب متوافق مع ASGI سنستخدمه لتشغيل تطبيقنا.
أولاً ، سننشئ أساس طلبنا.
from fastapi import FastAPI app = FastAPI(title="Random phrase")
هذا التطبيق قيد التشغيل بالفعل ويمكن تشغيله.
اكتب هذا الأمر في الجهاز الخاص بك وافتح الصفحة في المستعرض على العنوان http://127.0.0.1:8000/docs .
uvicorn <__>:app
لكن بينما في تطبيقنا ، لم تتم الإشارة إلى نقطة نهاية واحدة - دعنا نصلحها!
قاعدة بيانات
بما أننا نكتب مولد جملة عشوائي ، فمن الواضح أننا بحاجة إلى تخزينها في مكان ما. لهذا ، اخترت python-dict
بسيط.
قم db.py
ملف db.py
وابدأ كتابة التعليمات البرمجية.
نحن نستورد الوحدات اللازمة:
import typing import random from pydantic import BaseModel from pydantic import Field
بعد - نقوم بتعيين نموذجين: عبارة الإدخال (تلك التي سيرسلها المستخدم إلينا) و "المخرجات" (تلك التي سنرسلها إلى المستخدم).
class PhraseInput(BaseModel): """Phrase model""" author: str = "Anonymous"
بعد ذلك ، قم بإنشاء فصل بسيط للعمل مع قاعدة البيانات:
class Database: """ Our **fake** database. """ def __init__(self): self._items: typing.Dict[int, PhraseOutput] = {}
الآن يمكنك البدء في كتابة API نفسها.
API
قم main.py
ملف main.py
واستيراد الوحدات التالية:
from fastapi import FastAPI from fastapi import HTTPException from db import PhraseInput from db import PhraseOutput from db import Database
نهيئ تطبيقنا وقاعدة البيانات:
app = FastAPI(title="Random phrase") db = Database()
واكتب طريقة بسيطة للحصول على عبارة عشوائية!
@app.get( "/get", response_description="Random phrase", description="Get random phrase from database", response_model=PhraseOutput, ) async def get(): try: phrase = db.get(db.get_random()) except IndexError: raise HTTPException(404, "Phrase list is empty") return phrase
كما ترون ، في الديكور ، أشير أيضًا إلى بعض القيم الأخرى اللازمة لإنشاء وثائق أكثر جمالا :) في الوثائق الرسمية ، يمكنك الاطلاع على جميع المعلمات الممكنة.
في هذا الجزء من الشفرة ، نحاول الحصول على عبارة عشوائية من قاعدة البيانات ، وإذا كانت قاعدة البيانات فارغة ، فإننا نرجع خطأً مع الكود 404.
وبالمثل ، نكتب طرقًا أخرى:
@app.post( "/add", response_description="Added phrase with *id* parameter", response_model=PhraseOutput, ) async def add(phrase: PhraseInput): phrase_out = db.add(phrase) return phrase_out @app.delete("/delete", response_description="Result of deleting") async def delete(id: int): try: db.delete(id) except ValueError as e: raise HTTPException(404, str(e))
وهذا كل شيء! يتم تنفيذ API الصغيرة ولكن مفيدة لدينا!
الآن يمكننا تشغيل التطبيق باستخدام uvicorn ، وفتح الوثائق عبر الإنترنت ( http://127.0.0.1/docs ) وتجربة API لدينا!

مواد مفيدة
بالطبع ، لم أستطع إخبارك بجميع ميزات FastAPI ، على سبيل المثال ، مثل: نظام DI الذكي ، والوسطاء ، وملفات تعريف الارتباط ، وطرق المصادقة القياسية في واجهة برمجة التطبيقات (jwt ، oauth2 ، api-key) وغير ذلك الكثير!
لكن الغرض من هذه المقالة ليس نظرة عامة على جميع ميزات هذا الإطار ، ولكن كم يدفعك لاستكشافه بنفسك. FastAPI لديه وثائق كبيرة مع الكثير من الأمثلة.
كود من مقال عن جيثب
الوثائق الرسمية
مستودع جيثب
PS
قام cryo8822 بترجمة المقال إلى اللغة الإنجليزية ، شكرًا! .