توسعه بک‌اند با FastAPI فهرست مطالب
فصل ۰

مقدمه: آماده‌سازی محیط کار

پیش از جلسه اول، محیط کار را آماده می‌کنیم: پایتون و محیط مجازی، VS Code، برنامه Bruno برای آزمودن API، یک نمایشگر SQLite و در صورت نیاز PostgreSQL. در پایان فصل، اولین سرور FastAPI را اجرا می‌کنیم تا مطمئن شویم همه چیز سر جایش است.

در این فصل می‌خوانید
  1. بک‌اند چیست و FastAPI کجای کار است
  2. پایتون و محیط مجازی
  3. ویرایشگر VS Code
  4. Bruno: میز کار API
  5. SQLite و در صورت نیاز PostgreSQL
  6. اولین سرور
  7. نقشه راه دوره
  8. خلاصه فصل

۱. بک‌اند چیست و FastAPI کجای کار است

وقتی در یک اپلیکیشن ثبت‌نام می‌کنید، آنچه روی صفحه می‌بینید فرانت‌اند است. اما ذخیره کاربر، بررسی رمز، پیدا کردن دوره‌ها و جلوگیری از ثبت‌نام بیش از ظرفیت در جای دیگری اتفاق می‌افتد: روی یک سرور، در برنامه‌ای که بک‌اند نام دارد. فرانت‌اند و بک‌اند با هم از راه HTTP حرف می‌زنند و بک‌اند معمولاً پاسخ‌هایش را به شکل JSON برمی‌گرداند. به چنین بک‌اندی یک API می‌گوییم.

FastAPI یک چارچوب پایتونی برای ساختن همین API‌هاست. سه ویژگی آن را محبوب کرده است:

چرا Flask نه؟

اگر دوره پایتون پیشرفته را گذرانده باشید، Flask را دیده‌اید. Flask برای سایت‌هایی با قالب HTML عالی است. FastAPI برای API ساخته شده است: اعتبارسنجی، مستندسازی و تزریق وابستگی در خودش هست و لازم نیست جداگانه اضافه شود.

۲. پایتون و محیط مجازی

نسخه ۳٫۱۲ یا بالاتر پایتون را از python.org نصب کنید. در ویندوز، هنگام نصب گزینه Add python.exe to PATH را حتماً تیک بزنید. بعد در ترمینال بررسی کنید:

python --version
Python 3.13.5

هر جلسه این دوره پوشه خودش و فایل requirements.txt خودش را دارد. کتابخانه‌ها را هرگز روی پایتون اصلی سیستم نصب نکنید؛ برای هر جلسه یا پروژه یک محیط مجازی بسازید:

cd S02-fastapi-first-steps
python -m venv .venv
.venv\Scripts\activate            # Windows
source .venv/bin/activate         # Linux / macOS
pip install -r requirements.txt

بعد از فعال شدن محیط، نام آن در ابتدای خط ترمینال دیده می‌شود: (.venv). هر بار که ترمینال تازه‌ای باز می‌کنید، باید دوباره فعالش کنید.

پوشه .venv را هرگز در Git نگذارید

محیط مجازی با یک فرمان از روی requirements.txt دوباره ساخته می‌شود. به همین دلیل در فایل .gitignore مخزن آمده است. همین‌طور فایل‌های .env که رمز و کلید دارند.

۳. ویرایشگر VS Code

VS Code را نصب کنید و این افزونه‌ها را اضافه کنید:

پوشه یک جلسه را با File → Open Folder باز کنید و از پایین پنجره، مفسر پایتون را روی محیط مجازی همان پوشه بگذارید.

۴. Bruno: میز کار API

در این دوره به جای مرورگر، با برنامه‌ای به نام Bruno به API درخواست می‌فرستیم. در Bruno روش (GET، POST و...)، نشانی، هدرها و بدنه JSON را می‌نویسید، دکمه ارسال را می‌زنید و کد وضعیت و پاسخ را می‌بینید.

دلیل انتخاب Bruno این است که هر مجموعه درخواست، یک پوشه از فایل‌های متنی ساده با پسوند .bru است. این پوشه کنار کد پروژه در Git قرار می‌گیرد و به حساب کاربری نیازی ندارد. از جلسه دوم، پروژه هر جلسه یک پوشه bruno/ دارد. اگر با Postman آشنا هستید، آن هم کار می‌کند.

برای باز کردن یک مجموعه: Open Collection را بزنید، پوشه bruno پروژه را انتخاب کنید و از بالا سمت راست، محیط local را برگزینید.

meta {
  name: Get course 1
  type: http
  seq: 3
}

get {
  url: {{baseUrl}}/courses/1
  body: none
  auth: none
}

tests {
  test("status is 200", function() {
    expect(res.status).to.equal(200);
  });
}

هر فایل .bru یک درخواست است. {{baseUrl}} یک متغیر محیط است و بخش tests بعد از هر اجرا کد وضعیت را بررسی می‌کند.

۵. SQLite و در صورت نیاز PostgreSQL

از فصل پنجم، پروژه یک پایگاه داده واقعی دارد. در کلاس از SQLite استفاده می‌کنیم: پایگاه داده‌ای که فقط یک فایل است و به نصب هیچ چیزی نیاز ندارد. پایتون آن را همراه خودش دارد.

سرورهای واقعی معمولاً از PostgreSQL استفاده می‌کنند. خوشبختانه با SQLAlchemy برای رفتن از SQLite به PostgreSQL فقط باید نشانی اتصال را عوض کرد. PostgreSQL را مستقیم روی ویندوز ۱۱ یا اوبونتوی خودتان نصب می‌کنیم و بعد مثل یک سرویس در پس‌زمینه اجرا می‌شود. روش نصب قدم‌به‌قدم در فصل پنجم آمده است و تا آن وقت لازم نیست کاری بکنید.

۶. اولین سرور

برای اطمینان از اینکه همه چیز درست نصب شده است، اولین برنامه FastAPI را اجرا کنید:

import uvicorn
from fastapi import FastAPI

app = FastAPI(title='Training Center API', version='0.1.0')


@app.get('/')
def home() -> dict[str, str]:
    return {'message': 'Welcome to the Training Center API'}


@app.get('/about')
def about() -> dict[str, str | int]:
    """This docstring appears in /docs."""
    return {'institute': 'Kadoos', 'city': 'Rasht', 'sessions': 16}


if __name__ == '__main__':
    uvicorn.run('app:app', reload=True)

اولین سرور: نمونه S02-fastapi-first-steps/01_first_app/app.py

cd S02-fastapi-first-steps/01_first_app
python app.py
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

حالا این سه نشانی را در مرورگر باز کنید:

امتحان کنید

در فایل app.py پیام خوش‌آمدگویی را عوض کنید و فایل را ذخیره کنید. سرور خودش دوباره راه می‌افتد (به خاطر reload=True). صفحه را تازه کنید و تغییر را ببینید.

۷. نقشه راه دوره

جلسهموضوعقدم پروژه
۱مرور پایتون پیشرفته، HTTP و RESTهسته پروژه با پایتون خالص
۲قدم‌های اول FastAPIاولین API با داده در حافظه
۳Pydantic و اعتبارسنجیطرح‌واره‌های ورودی و خروجی
۴تزریق وابستگی و ساختارپروژه به یک بسته منظم تبدیل می‌شود
۵مدل‌های SQLAlchemyپایگاه داده واقعی
۶CRUD با SQLAlchemyویرایش و حذف و جست‌وجو
۷رابطه‌هاثبت‌نام دانشجو در دوره
۸Alembic و صفحه‌بندیمهاجرت و فهرست حرفه‌ای
۹احراز هویتثبت‌نام و ورود با رمز امن
۱۰JWT و نقش‌هادسترسی بر اساس نقش و مالکیت
۱۱فایل، کوکی و CORSفایل‌های درسی
۱۲asyncتبدیل کامل پروژه به ناهمگام
۱۳آزمون خودکارپنجاه و یک آزمون برای پروژه
۱۴کلاینت RESTکلاینت پایتونی پروژه
۱۵کلاینت asyncبرنامه داشبورد مدرس
۱۶پروژه پایانیرفع باگ، تکمیل و بازبینی کد
فایل‌های تمرینی این فصل

فایل‌های دوره در شانزده پوشه به نام‌های S01-... تا S16-... قرار دارند. هر پوشه یک README.md با هدف جلسه و تقسیم زمان، یک exercises.md با تمرین‌ها و یک requirements.txt دارد. نمونه‌ها شماره‌گذاری شده‌اند و آخرین پوشه هر جلسه پروژه همان جلسه است.

۸. خلاصه فصل

ابزارکاربرد
python -m venv .venvساختن محیط مجازی برای هر جلسه
pip install -r requirements.txtنصب کتابخانه‌های همان جلسه
VS Code + Python + Pylanceنوشتن کد با بررسی نوع
Brunoفرستادن و آزمودن درخواست‌ها، ذخیره آنها در Git
SQLiteپایگاه داده بدون نصب، برای کلاس
PostgreSQLپایگاه داده سرورهای واقعی، روی ویندوز یا اوبونتو
/docs و /redocمستند زنده‌ای که FastAPI می‌سازد

تمرین‌های این فصل

  1. پایتون و VS Code را نصب کنید و نسخه پایتون را بررسی کنید.
  2. برای پوشه S02-fastapi-first-steps یک محیط مجازی بسازید و کتابخانه‌ها را نصب کنید.
  3. نمونه 01_first_app را اجرا کنید و هر سه نشانی /، /docs و /redoc را باز کنید.
  4. Bruno را نصب کنید و مجموعه S01-python-refresh-and-rest/13_bruno_first_requests را باز کنید. هر چهار درخواست را اجرا کنید.
  5. در Bruno یک درخواست تازه بسازید که GET http://127.0.0.1:8000/about را صدا بزند.
  6. راهنمای نصب PostgreSQL را در پوشه S05-sqlalchemy-models/05_postgresql بخوانید و ببینید برای سیستم‌عامل شما کدام فرمان‌ها لازم است.
فهرست مطالب فصل بعد: مرور پایتون پیشرفته، HTTP و REST