در دنیای برنامه نویسی وب، فریم ورکها نقش مهمی در تسهیل و تسریع فرآیند توسعه برنامهها ایفا میکنند. در این مقاله، قصد داریم FastAPI را مورد بررسی قرار دهیم؛ یکی از پیشرفتهترین فریم ورکهای Python که به دلیل سرعت بالا و ویژگیهای امنیتی قابل توجه اش، محبوبیت زیادی کسب کرده است. این چارچوب به عنوان ابزاری نوین، تواناییهای فراوانی را برای توسعه دهندگان فراهم میآورد که به آنها کمک میکند تا با کارایی بهتر و سرعت بیشتری به اهداف خود برسند.

FastAPI یک فریم ورک (Framework) مدرن و سریع برای توسعه APIها با استفاده از Python است. این فریم ورک بر اساس استانداردهای Open API و JSON Schema طراحی شده و امکان ایجاد مستندات خودکار و بهره گیری از Type Hints را فراهم میکند. این تکنولوژی بر سرعت و دقت در توسعه API تمرکز دارد و از Asynchronous Programming پشتیبانی میکند، که باعث بهبود عملکرد در زمان اجرا میشود.
تنوع کاربردهای این چارچوب از ساخت APIهای ساده گرفته تا پیاده سازی معماریهای میکروسرویسی پیچیده، این فریم ورک را به یک انتخاب محبوب در بین توسعه دهندگان تبدیل کرده است. استفاده از فریم ورک FastAPI نه تنها به افزایش سرعت توسعه کمک میکند، بلکه بهبود کیفیت نهایی محصول را نیز تضمین میکند. در ادامه به بررسی برخی از مهمترین و پرکاربردترین موارد استفاده از این فریم ورک میپردازیم.

این فریم ورک کاربردی با ویژگیهای منحصر به فردش، گزینه قدرتمندی برای توسعه انواع اپلیکیشنهای وب و API است. این فریم ورک کارآمد گستره وسیعی از کاربردها را پوشش میدهد و مزایای بی نظیری را برای توسعه دهندگان به ارمغان میآورد. از جمله کاربردهای مهمی که این چارچوب توسعه وب دارد، عبارتند از:
FastAPI به شما امکان میدهد تا APIهای با کارایی بالا را به سرعت توسعه دهید. این فریم ورک برای اپلیکیشنهای موبایل، وب سایتها و سیستمهای مبتنی بر داده بسیار مناسب است. استفاده از FastAPI در این زمینهها به دلیل سرعت بالا در پردازش درخواستها و کاهش تأخیر، تجربه کاربری بهتری را فراهم میکند.
با پشتیبانی از Asynchronous Code، برای سناریوهایی که نیاز به پردازش همزمان چندین درخواست است، ایده آل میباشد. این ویژگی به خصوص در محیط هایی که ترافیک بالای شبکه دارند، مفید است و به بهینه سازی استفاده از منابع سرور کمک میکند.
یکی از برجستهترین ویژگی هایش، سادگی و سرعت بالا در توسعه است. توسعه دهندگان میتوانند با استفاده از این فریم ورک به راحتی APIهای قدرتمندی بسازند که کمترین خطا را دارند، به لطف استفاده از Type Hints و سایر قابلیتهای Python.
این فریم ورک را میتوان در کنار فریم ورکهای فرانت اند مدرن مانند React یا Angular برای ساخت وب اپلیکیشنهای تعاملی و پویا استفاده کرد. این ترکیب به توسعه دهندگان امکان میدهد تا رابط کاربری غنی و واکنش گرا را با بک اند قدرتمندی که توسط FastAPI فراهم شده، ایجاد کنند.
FastAPI با قابلیت هایی مانند پشتیبانی از Docker و Kubernetes، برای ساخت و مدیریت میکروسرویسها بسیار مناسب است. این فریم ورک به توسعه دهندگان امکان میدهد تا سیستمهای پیچیده و مقیاس پذیر را به آسانی توسعه دهند و مدیریت کنند.

برای شروع کار و استفاده از قابلیتهای سریع و انعطاف پذیر آن، نصب این فریم ورک روی محیط توسعه شما چند مرحله ساده را شامل میشود. در ادامه، مراحل نصب و راه اندازی را به ترتیب و به صورت گام به گام توضیح میدهیم.
FastAPI بر پایه زبان برنامه نویسی Python استوار است، بنابراین اولین قدم، اطمینان از نصب Python نسخه 3.6 یا بالاتر است. Python را میتوانید از وب سایت رسمی Python به آدرس python.org دانلود و نصب کنید.
پیش از نصب فریم ورک و وابستگیهای آن، توصیه میشود که یک محیط مجازی Python ایجاد کنید. این کار از تداخل بستههای نصب شده با سایر پروژهها جلوگیری میکند. برای ایجاد محیط مجازی میتوانید از دستورات زیر استفاده کنید:
python -m venv fastapi-envسپس، محیط مجازی را فعال کنید.
در ویندوز:
fastapi-env\Scripts\activateدر mac OS و Linux:
source fastapi-env/bin/activateبا محیط مجازی (virtual environment) فعال، میتوانید FastAPI و Uvicorn را که یک سرور Asynchronous Server Gateway Interface برای اجرای اپلیکیشنهای FastAPI است با استفاده از ابزار مدیریت بستههای پایتون (pip) نصب کنید:
pip install fastapi[all]این دستور، تمامی کتابخانهها و وابستگیهای لازم، از جمله uvicorn که سرور ASGI برای اجرای اپلیکیشنهای FastAPI است را بر روی سیستم شما نصب میکند.
پس از نصب، میتوانید اولین برنامه ی FastAPI خود را با ایجاد یک فایل جدید به نام main.py بنویسید و کد زیر را در آن قرار دهید:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}برای اجرای برنامه ی خود از Uvicorn به عنوان سرور استفاده کنید. دستور زیر را در ترمینال یا CMD وارد کنید:
uvicorn main:app --reloadاین دستور برنامه ی FastAPI شما را با قابلیت بارگذاری مجدد خودکار (برای تغییرات کد در زمان توسعه) اجرا میکند.
با اتمام این گام ها، شما یک برنامه ی FastAPI ساده را نصب، راه اندازی و اجرا کرده اید و حالا آماده اید تا پروژههای بزرگتر و پیچیدهتری را آغاز کنید.
برای شروع کار با FastAPI، خبر خوب این است که به کدنویسی پیچیده یا تنظیمات طولانی نیازی ندارید. تنها با چند خط کد میتوانید یک API کاملاً قابلاجرا بسازید.
در این بخش، یک مثال سادهی «Hello, World!» را پیادهسازی میکنیم تا با منطق کلی FastAPI آشنا شوید.
ساخت فایل اصلی برنامه
نام فایل اصلی FastAPI کاملاً به انتخاب شماست. معمولاً از نامهایی مثل main.py، app.py یا api.py استفاده میشود. در این آموزش فرض میکنیم فایل اصلی شما main.py است.
کد زیر را داخل این فایل قرار دهید:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello, FastAPI!"}
این اپلیکیشن ساده، مفاهیم پایهی FastAPI را بهخوبی نشان میدهد:
نکته مهم این است که توابع در FastAPI میتوانند سینک (synchronous) یا async باشند. خود فریمورک تشخیص میدهد چگونه آنها را اجرا کند، به همین دلیل، در پیادهسازی منطق برنامه محدود به یک الگوی خاص نیستید.
اجرای برنامه در حالت توسعه (Development)
برای اجرای برنامه، از CLI رسمی FastAPI استفاده میکنیم:
fastapi dev main.py
اجرای برنامه در حالت dev باعث میشود هر بار که فایل کد را تغییر میدهید، سرور بهصورت خودکار ریلود شود. این دقیقاً همان چیزی است که در زمان توسعه به آن نیاز دارید.
اگر نام فایل شما main.py، app.py یا api.py باشد، حتی میتوانید نام فایل را هم ننویسید، اما مشخصکردن آن شفافتر و حرفهایتر است.
اجرای برنامه در حالت Production
برای محیط واقعی و سرور، باید از حالت production استفاده کنید:
fastapi run main.py
در این حالت:
همچنین میتوانید با فلگهای --host و --port مشخص کنید برنامه روی چه آدرس و پورتی اجرا شود. بهصورت پیشفرض، FastAPI روی آدرس زیر در دسترس است:
http://127.0.0.1:8000
با باز کردن این آدرس در مرورگر، خروجی JSON زیر را خواهید دید:

برای بررسی خروجیها، میتوانید از مرورگر استفاده کنید، اما برای کار حرفهایتر با APIها ابزارهایی مثل Postman یا Bruno انتخابهای مناسبی هستند. حتی نصب یک افزونهی نمایش JSON در مرورگر هم میتواند تجربهی توسعه را بهتر کند.
در دنیای واقعی، APIها فقط برای برگرداندن یک پیام دوستانه مثل «Hello, World!» ساخته نمیشوند. معمولاً لازم است endpointهایی داشته باشید که داده دریافت کنند، آن را پردازش کنند و خروجی معنادار برگردانند؛ دقیقاً همان چیزی که مثلاً هنگام اتصال یک فرانتاند JavaScript به بکاند به آن نیاز دارید.
FastAPI این الگوهای رایج را با مفاهیمی مثل Path Parameter، Query Parameter و Request Body بهشکلی ساده و شفاف در اختیار شما قرار میدهد.
برای درک بهتر، کد قبلی را کنار بگذارید و محتوای فایل main.py را با مثال زیر جایگزین کنید. در این مثال، یک API ساده برای مدیریت فهرست کتابها پیادهسازی شده است.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
books = [
{"id": 1, "title": "Python Basics", "author": "Real P.", "pages": 635},
{"id": 2, "title": "Breaking the Rules", "author": "Stephen G.", "pages": 99},
]
class Book(BaseModel):
title: str
author: str
pages: int در این بخش:
دریافت لیست کتابها با Query Parameter
اولین endpoint، لیست کتابها را برمیگرداند و یک پارامتر اختیاری به نام limit دارد:
@app.get("/books")
def get_books(limit: int | None = None):
if limit:
return {"books": books[:limit]}
return {"books": books}
پارامتر limit یک Query Parameter است. اگر کاربر آن را ارسال کند، فقط به همان تعداد کتاب برگردانده میشود؛ در غیر این صورت، کل لیست کتابها ارسال خواهد شد. کنترل این رفتار کاملاً در اختیار مصرفکنندهی API است.
دریافت یک کتاب خاص با Path Parameter
در endpoint بعدی، از Path Parameter استفاده شده است:
@app.get("/books/{book_id}")
def get_book(book_id: int):
for book in books:
if book["id"] == book_id:
return book
return {"error": "Book not found"}
اینجا مقدار book_id مستقیماً از مسیر URL دریافت میشود. اگر کتابی با این شناسه وجود داشته باشد، اطلاعات آن برگردانده میشود؛ در غیر این صورت، یک پیام خطا به کاربر ارسال خواهد شد.
افزودن کتاب جدید با Request Body
تا اینجا فقط با درخواستهای GET کار کردهایم. حالا نوبت به POST میرسد:
@app.post("/books")
def create_book(book: Book):
new_book = {
"id": len(books) + 1,
"title": book.title,
"author": book.author,
"pages": book.pages
}
books.append(new_book)
return new_book
در این endpoint:
اگر کاربر دادهی نامعتبر (مثلاً مقدار متنی برای pages) ارسال کند، FastAPI قبل از اجرای منطق شما، خطای مناسب و قابل فهمی برمیگرداند.
مدل زیر پایهی اعتبارسنجی دادههاست:
class Book(BaseModel):
title: str
author: str
pages: int بهکمک Pydantic، ساختار دادهها شفاف است و نیازی به نوشتن کدهای دستی برای بررسی ورودیها ندارید. این یکی از مزیتهای کلیدی FastAPI در پروژههای واقعی است.
یک نکته مهم درباره ذخیرهسازی دادهها: لیست books صرفاً برای مثال استفاده شده است. در پروژههای واقعی، برای ذخیرهسازی پایدار دادهها باید از دیتابیس استفاده کنید. FastAPI بهخوبی با دیتابیسهای مختلف سازگار است و معمولاً در کنار ORMهایی مثل SQLAlchemy استفاده میشود.
تست API ساختهشده
پس از اجرای برنامه با دستور زیر:
fastapi dev main.py
میتوانید endpointها را مستقیماً در مرورگر تست کنید:
http://127.0.0.1:8000/books
http://127.0.0.1:8000/books?limit=1
http://127.0.0.1:8000/books/2
یکی از برجستهترین و کاربردیترین قابلیتهای FastAPI، مستندات خودکار API است. بدون نوشتن حتی یک خط کد اضافه، FastAPI بر اساس ساختار کد و type hintها، مستنداتی تعاملی و کاملاً قابل استفاده برای API شما تولید میکند.
در حالی که سرور شما در حال اجراست، مرورگر را باز کنید و به آدرس زیر بروید:
در این صفحه، رابط کاربری تعاملی Swagger UI را مشاهده میکنید:

Swagger UI تمام endpointها، متدهای HTTP، ساختار ورودیها و خروجیهای API را نمایش میدهد. اما این فقط یک مستندات ساده نیست؛ شما میتوانید مستقیماً از داخل مرورگر، endpointها را اجرا و تست کنید.
این قابلیت بهویژه برای endpointهای POST بسیار ارزشمند است. مثلاً برای اضافهکردن یک کتاب جدید:
بدون نیاز به Postman یا ابزار جانبی، درخواست شما اجرا میشود و پاسخ API را همانجا میبینید.
اگر ترجیح میدهید مستندات را در قالبی سادهتر و رسمیتر ببینید، FastAPI یک گزینهی دیگر هم در اختیار شما میگذارد. کافی است به آدرس زیر بروید:

ReDoc همان اطلاعات Swagger را نمایش میدهد، اما با چیدمانی متفاوت. هر دو ابزار مستندات خودکار هستند و بهمحض اینکه endpoint جدیدی اضافه کنید یا تغییری در کد بدهید، بعد از ریاستارت سرور، مستندات نیز بهصورت خودکار بهروزرسانی میشوند.
این قابلیت چند مزیت مهم و عملی دارد:
در بسیاری از پروژهها، همین قابلیت مستندات خودکار بهتنهایی دلیل انتخاب FastAPI است. صرفهجویی در زمان، کاهش خطاهای انسانی و تجربهی توسعهدهندهی بسیار بهتر، FastAPI را به گزینهای ایدهآل برای APIهای واقعی و مقیاسپذیر تبدیل میکند.

در این بخش، به بررسی دقیقتر ویژگیهای منحصر به فرد FastAPI و تاثیر آنها بر توسعه وب خواهیم پرداخت. این فریم ورک به خاطر ساختار مدرن و قابلیتهای پیشرفته اش، مزایا و چالشهای خاص خود را دارد که میتواند بر تصمیمات توسعه دهندگان تاثیر بگذارد.
با درک این مزایا و معایب، توسعه دهندگان میتوانند تصمیم بهتری برای انتخاب فریم ورک مناسب در هر پروژه نرم افزاری داشته باشند.
احراز هویت یکی از جنبههای مهم توسعه هر وب اپلیکیشن است. این چارچوب با ارائه ابزارهای قدرتمند برای مدیریت احراز هویت و مجوزها، توسعه دهندگان را قادر میسازد تا اپلیکیشنهای امنی بسازند.در این بخش با هدف درکی عمیق از این امکانات برای شما به روشهای احراز هویت و مدیریت مجوزها در این فریم ورک میپردازیم.
این پلتفرم چندین روش برای احراز هویت را پشتیبانی میکند که شامل استفاده از توکن ها، OAuth2 و کوکیها میشود. برای بهبوود امنیت، این فریم ورک از ماژول هایی مانند python-jose برای JWT و passlib برای هش (hash) کردن رمز عبور استفاده میکند.
OAuth2 یکی از روشهای رایج برای احراز هویت در اپلیکیشنهای مدرن است. FastAPI امکانات زیر را برای پیاده سازی این روش فراهم میکند:
پس از احراز هویت، مرحله بعدی تعیین سطح دسترسی کاربر است. این فریم ورک به شما امکان میدهد تا مجوزهای مختلفی بر اساس نقشهای کاربران تعریف کنید که اغلب از طریق توابع dependency انجام میشود.
در زیر نمونه ای از کد برای تعیین اینکه آیا کاربر دارای نقش ادمین است یا خیر آورده شده است:
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from typing import Optional
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
def get_current_user(token: str = Depends(oauth2_scheme)):
user = fake_decode_token(token)
return user
def get_current_active_user(
current_user: User = Depends(get_current_user)
):
if not current_user.is_active:
raise HTTPException(status_code=400)
return current_user
def get_current_admin_user(
current_user: User = Depends(get_current_active_user)
):
if current_user.role != "admin":
raise HTTPException(status_code=401)
return current_userبا استفاده از این توابع در endpointهای مختلف، میتوانید مشخص کنید تنها کاربرانی که مجوزهای لازم را دارند به منابع حساس دسترسی پیدا کنند. این تنظیمات امنیتی ، فریم ورک FastAPI را به یکی از امنترین و قابل انعطافترین فریم ورکها برای توسعه ی وب اپلیکیشنها تبدیل میکند.
این ابزار با بهره گیری از قابلیتهای Starlette، امکان تست کلاینت را به صورت داخلی فراهم میکند. این ویژگی به توسعه دهندگان امکان میدهد تا APIهای خود را به شکل زیر تست کنند:
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}این کد API endpoint شما را فراخوانی میکند و پاسخ دریافتی را بررسی میکند.
شما میتوانید پارامترهای کوئری (query string in URL)، بدنههای درخواست، احراز هویت و غیره را نیز تست کنید. به عنوان مثال:
def test_greet():
response = client.get("/greet/John")
assert response.status_code == 200
assert response.text == "Hello John"
def test_create_item():
response = client.post("/items/", json={"name": "Foo")
assert response.status_code == 200برای تست جریانهای OAuth2، میتوانید به طور مستقیم endpointهای OAuth2 را فراخوانی کنید. این روش تست به شما امکان میدهد تا از صحت عملکرد تمام جنبههای API خود اطمینان حاصل کنید و به توسعه ی نرم افزاری مطمئن و کارآمد کمک میکند.
FastAPI با تمرکز بر سرعت، کارایی و سادگی، یکی از بهترین گزینهها برای توسعه APIهای مدرن و کارآمد به شمار میرود. این فریم ورک قدرتمند با بهره گیری از ویژگیهای پیشرفته Python و پشتیبانی از برنامه نویسی غیرهمگام (Asynchronous Programming)، به توسعه دهندگان این امکان را میدهد تا برنامه هایی با عملکرد فوق العاده، قابلیت نگهداری آسان و مقیاس پذیری بالا خلق کنند.
علاوه بر این، FastAPI با ارائه مستندسازی خودکار، پشتیبانی از ابزارهای توسعه قدرتمند و جامعه فعال کاربران، فرآیند توسعه را برای برنامه نویسان تسهیل میکند. این فریم ورک کاربرد گسترده ای در زمینههای مختلف از جمله وب اپلیکیشن ها، میکروسرویس ها، سیستمهای تحلیل داده و موارد دیگر دارد.
اگر تجربه استفاده از این فریم ورک قدرتمند را در پروژههای خود دارید، پیشنهاد میدهم تجربیات، چالش ها، دستاوردها و نکات آموزنده خود را در بخش نظرات همین مقاله با جامعه کاربران به اشتراک بگذارید. اشتراک گذاری دانش و تجربیات شما میتواند به پیشرفت و بهبود مستمر و افزایش آگاهی در مورد این ابزار ارزشمند کمک شایانی کند.
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: