پرش به محتویات

ویژگی ها

ویژگی های FastAPI

FastAPI موارد زیر را به شما ارائه میدهد:

برپایه استاندارد های باز

  • OpenAPI برای ساخت API, شامل مشخص سازی path operation ها, پارامترها, body request ها, امنیت و غیره.
  • مستندسازی خودکار data model با JSON Schema (همانطور که OpenAPI خود نیز مبتنی بر JSON Schema است).
  • طراحی شده بر اساس استاندارد هایی که پس از یک مطالعه دقیق بدست آمده اند بجای طرحی ناپخته و بدون فکر.
  • همچنین به شما اجازه میدهد تا از تولید خودکار client code در بسیاری از زبان ها استفاده کنید.

مستندات خودکار

مستندات API تعاملی و ایجاد رابط کاربری وب. از آنجایی که این فریم ورک برپایه OpenAPI میباشد، آپشن های متعددی وجود دارد که ۲ مورد بصورت پیش فرض گنجانده شده اند.

  • Swagger UI، با کاوش تعاملی، API خود را مستقیما از طریق مرورگر صدازده و تست کنید.

Swagger UI interaction

  • مستندات API جایگزین با ReDoc.

ReDoc

فقط پایتون مدرن

همه اینها برپایه type declaration های پایتون ۳.۶ استاندارد (به لطف Pydantic) میباشند. سینتکس جدیدی درکار نیست. تنها پایتون مدرن استاندارد.

اگر به یک یادآوری ۲ دقیقه ای در مورد نحوه استفاده از تایپ های پایتون دارید (حتی اگر از FastAPI استفاده نمیکنید) این آموزش کوتاه را بررسی کنید: Python Types.

شما پایتون استاندارد را با استفاده از تایپ ها مینویسید:

from datetime import date

from pydantic import BaseModel

# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
    return user_id


# A Pydantic model
class User(BaseModel):
    id: int
    name: str
    joined: date

که سپس میتوان به این شکل از آن استفاده کرد:

my_user: User = User(id=3, name="John Doe", joined="2018-07-19")

second_user_data = {
    "id": 4,
    "name": "Mary",
    "joined": "2018-11-30",
}

my_second_user: User = User(**second_user_data)

Info

**second_user_data یعنی:

کلید ها و مقادیر دیکشنری second_user_data را مستقیما به عنوان ارگومان های key-value بفرست، که معادل است با : User(id=4, name="Mary", joined="2018-11-30")

پشتیبانی ویرایشگر

تمام فریم ورک به گونه ای طراحی شده که استفاده از آن آسان و شهودی باشد، تمام تصمیمات حتی قبل از شروع توسعه بر روی چندین ویرایشگر آزمایش شده اند، تا از بهترین تجربه توسعه اطمینان حاصل شود.

در آخرین نظرسنجی توسعه دهندگان پایتون کاملا مشخص بود که بیشترین ویژگی مورد استفاده از "تکمیل خودکار" است.

تمام فریم ورک FastAPI برپایه ای برای براورده کردن این نیاز نیز ایجاد گشته است. تکمیل خودکار در همه جا کار میکند.

شما به ندرت نیاز به بازگشت به مستندات را خواهید داشت.

ببینید که چگونه ویرایشگر شما ممکن است به شما کمک کند:

editor support

editor support

شما پیشنهاد های تکمیل خودکاری را خواهید گرفت که حتی ممکن است قبلا آن را غیرممکن تصور میکردید. به عنوان مثال کلید price در داخل بدنه JSON (که میتوانست تودرتو نیز باشد) که از یک درخواست آمده است.

دیگر خبری از تایپ کلید اشتباهی، برگشتن به مستندات یا پایین بالا رفتن برای فهمیدن اینکه شما از username یا user_name استفاده کرده اید نیست.

مختصر

FastAPI پیش فرض های معقولی برای همه چیز دارد، با قابلیت تنظیمات اختیاری در همه جا. تمام پارامترها را میتوانید برای انجام انچه نیاز دارید و برای تعریف API مورد نیاز خود به خوبی تنظیم کنید.

اما به طور پیش فرض، همه چیز کار میکند.

اعتبارسنجی

  • اعتبارسنجی برای بیشتر (یا همه؟) data type های پایتون، شامل:

    • JSON objects (dict)
    • آرایه های (‍‍‍‍list) JSON با قابلیت مشخص سازی تایپ ایتم های درون لیست.
    • فیلد های رشته (str)، به همراه مشخص سازی حداقل و حداکثر طول رشته.
    • اعداد (‍‍int,float) با حداقل و حداکثر مقدار و غیره.
  • اعتبارسنجی برای تایپ های عجیب تر، مثل:

    • URL.
    • Email.
    • UUID.
    • و غیره.

تمام اعتبارسنجی ها توسط کتابخانه اثبات شده و قدرتمند Pydantic انجام میشود.

امنیت و احراز هویت

امنیت و احرازهویت بدون هیچگونه ارتباط و مصالحه ای با پایگاه های داده یا مدل های داده ایجاد شده اند.

تمام طرح های امنیتی در OpenAPI تعریف شده اند، از جمله:

  • .
  • OAuth2 (همچنین با JWT tokens). آموزش را در OAuth2 with JWT مشاهده کنید.
  • کلید های API:
    • Headers
    • Query parameters
    • Cookies، و غیره.

به علاوه تمام ویژگی های امنیتی از Statlette (شامل session cookies)

همه اینها به عنوان ابزارها و اجزای قابل استفاده ای ساخته شده اند که به راحتی با سیستم های شما، مخازن داده، پایگاه های داده رابطه ای و NoSQL و غیره ادغام میشوند.

Dependency Injection

FastAPI شامل یک سیستم Dependency Injection بسیار آسان اما بسیار قدرتمند است.

  • حتی وابستگی ها نیز میتوانند وابستگی هایی داشته باشند و یک سلسله مراتب یا "گرافی" از وابستگی ها ایجاد کنند.

  • همه چیز توسط فریم ورک به طور خودکار اداره میشود

  • همه وابستگی ها میتوانند به داده های request ها نیاز داشته باشند و مستندات خودکار و محدودیت های path operation را افزایش دهند.

  • با قابلیت اعتبارسنجی خودکار حتی برای path operation parameter های تعریف شده در وابستگی ها.

  • پشتیبانی از سیستم های پیچیده احرازهویت کاربر، اتصالات پایگاه داده و غیره.

  • بدون هیچ ارتباطی با دیتابیس ها، فرانت اند و غیره. اما ادغام آسان و راحت با همه آنها.

پلاگین های نامحدود

یا به عبارت دیگر، هیچ نیازی به آنها نیست، کد موردنیاز خود را وارد و استفاده کنید.

هر یکپارچه سازی به گونه ای طراحی شده است که استفاده از آن بسیار ساده باشد (با وابستگی ها) که میتوانید با استفاده از همان ساختار و روشی که برای path operation های خود استفاده کرده اید تنها در ۲ خط کد "پلاگین" برنامه خودتان را ایجاد کنید.

تست شده

  • 100% پوشش تست.

  • 100% کد بر اساس type annotate ها.

  • استفاده شده در اپلیکیشن های تولید

ویژگی های Starlette

FastAPI کاملا (و براساس) با Starlette سازگار است. بنابراین، هرکد اضافی Starlette که دارید، نیز کار خواهد کرد.

‍‍FastAPI در واقع یک زیرکلاس از Starlette است. بنابراین اگر از قبل Starlette را میشناسید یا با آن کار کرده اید، بیشتر قابلیت ها به همین روش کار خواهد کرد.

با FastAPI شما تمام ویژگی های Starlette را خواهید داشت (زیرا FastAPI یک نسخه و نمونه به تمام معنا از Starlette است):

ویژگی های Pydantic

FastAPI کاملا (و براساس) با Pydantic سازگار است. بنابراین هرکد Pydantic اضافی که داشته باشید، نیز کار خواهد کرد.

از جمله کتابخانه های خارجی نیز مبتنی بر Pydantic میتوان به ORM و ODM ها برای دیتابیس ها اشاره کرد.

این همچنین به این معناست که در خیلی از موارد میتوانید همان ابجکتی که از request میگیرید را مستقیما به دیتابیس بفرستید زیرا همه چیز به طور خودکار تأیید میشود.

همین امر برعکس نیز صدق می‌کند، در بسیاری از موارد شما می‌توانید ابجکتی را که از پایگاه داده دریافت می‌کنید را مستقیماً به کاربر ارسال کنید.

با FastAPI شما تمام ویژگی های Pydantic را دراختیار دارید (زیرا FastAPI برای تمام بخش مدیریت دیتا بر اساس Pydantic عمل میکند):

  • خبری از گیج شدن نیست:
    • هیچ زبان خردی برای یادگیری تعریف طرحواره های جدید وجود ندارد.
    • اگر تایپ های پایتون را میشناسید، نحوه استفاده از Pydantic را نیز میدانید.
  • به خوبی با IDE/linter/مغز شما عمل میکند:
    • به این دلیل که ساختار داده Pydantic فقط نمونه هایی از کلاس هایی هستند که شما تعریف میکنید، تکمیل خودکار، mypy، linting و مشاهده شما باید به درستی با داده های معتبر شما کار کنند.
  • اعتبار سنجی ساختارهای پیچیده:
    • استفاده از مدل های سلسله مراتبی Pydantic, List و Dict کتابخانه typing پایتون و غیره.
    • و اعتبارسنج ها اجازه میدهند که طرحواره های داده پیچیده به طور واضح و آسان تعریف، بررسی و بر پایه JSON مستند شوند.
    • شما میتوانید ابجکت های عمیقا تودرتو JSON را که همگی تایید شده و annotated شده اند را داشته باشید.
  • قابل توسعه:
    • Pydantic اجازه میدهد تا data type های سفارشی تعریف شوند یا میتوانید اعتبارسنجی را با روش هایی به روی مدل ها با validator decorator گسترش دهید.
  • 100% پوشش با تست.