Модуль 1

Що таке FastAPI і навіщо він потрібен

Ось готовий урок, створений за твоїм майстер-промптом. Ми зануримося у світ веб-розробки з енергією CS50!


🎓 Урок: Що таке FastAPI і навіщо він потрібен

👋 Привіт, світе! Мене звати... (тут ваше ім’я або просто «ваш інструктор»), і це — вступ до сучасної бекенд-розробки.

Сьогодні ми говоримо про інструмент, який змінив правила гри у світі Python. Інструмент, який люблять у Netflix, Uber та Microsoft. Ми говоримо про FastAPI.


1. 🔥 Вступ: Проблема та мотивація

Уявіть ситуацію. Ви написали геніальну Python-функцію, яка передбачає курс біткоїна, або, скажімо, рекомендує ідеальний фільм на вечір. Вона працює у вас на ноутбуці. Чудово.

Але тут виникає проблема: Як дати доступ до вашої функції мільйонам користувачів через інтернет?

Ви ж не будете надсилати кожному свій файл .py, правда? Вашій функції потрібен «інтерфейс», «двері», через які мобільний додаток або веб-сайт зможе постукати, передати дані й отримати відповідь.

Це і є API (Application Programming Interface).

Але створення API раніше було схоже на будівництво будинку з нуля: треба було замішувати бетон, прокладати проводку, думати про безпеку... Це довго і нудно.

Риторичне питання: Хіба розробка не має бути такою ж швидкою, як і ваша думка? Хіба ви хочете витрачати години на написання нудної документації, яку ніхто не читатиме?

Звісно, ні! Саме тут на сцену виходить FastAPI.

Аналогія: Уявіть, що старі фреймворки — це пошта минулого століття. Ви пишете листа, клеїте марку, несете в скриньку, чекаєте тиждень... FastAPI — це месенджер. Це миттєво. Це чітко. І він сам підказує вам слова (автодоповнення коду), перш ніж ви їх допишете.


2. 🧠 Теоретична база (без нудної академічності)

Що ж таке FastAPI «під капотом»?

FastAPI — це сучасний веб-фреймворк для створення API на Python.

Ось три кити, на яких він тримається (це треба запам’ятати):

  1. Швидкість (Asynchronous): Він використовує сучасні можливості Python (async / await). Це дозволяє йому обробляти тисячі запитів одночасно, не чекаючи, поки один завершиться, щоб почати інший.

    • Інтуїтивно: Як офіціант, який приймає замовлення у п'яти столиків, поки кухня готує першу страву. Він не стоїть і не чекає, поки посмажиться котлета.
  2. Типізація даних (Type Hints & Pydantic): FastAPI вимагає, щоб ви вказували типи даних (це число? це рядок?).

    • Навіщо: Це ваш «фейс-контроль». Якщо функція чекає число, а користувач надіслав слово "привіт", FastAPI зупинить його на вході й скаже: «Ей, друже, помилка!». Вам не треба писати ці перевірки вручну!
  3. Автоматична документація (Swagger UI): Це магія. FastAPI дивиться на ваш код і сам малює інтерактивний сайт, де можна протестувати ваше API.

    • Логіка: Ви пишете код — документація з’являється сама.

3. 🧪 Приклади (від простого до реального)

Для запуску нам знадобиться бібліотека uvicorn (це сервер, який запускає наш код). Встановлення: pip install fastapi uvicorn

Приклад 1: Мінімальний (Hello World)

Подивіться на цей код. Як ви думаєте, що станеться, коли ми звернемося до нашого сервера?

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello World"}

Пояснення: * Ми створили об'єкт app. Це і є наш додаток. * Декоратор @app.get("/") каже: "Якщо хтось постукає у головні двері (/) методом GET (просто відкриє сторінку), виконай цю функцію". * Ми повертаємо словник (JSON). FastAPI сам перетворить це на правильний формат для вебу.

Приклад 2: Передача параметрів (Типовий кейс)

Тепер цікавіше. Давайте привітаємо конкретного користувача.

@app.get("/hello/{name}")
def say_hello(name: str):
    return {"message": f"Привіт, {name}!"}

Питання до студента: Що буде, якщо я перейду за адресою /hello/David? А якщо /hello/123? Відповідь: В обох випадках спрацює, бо 123 у рядку URL також сприйметься як текст (str). Але ми отримаємо персоналізовану відповідь!

Приклад 3: Валідація даних (Це вже рівень PRO)

Уявіть, що ми інтернет-магазин. Ми хочемо додати товар. Товар має мати назву (рядок) і ціну (число).

from pydantic import BaseModel

# Ми описуємо, як виглядає Товар
class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.post("/items/")
def create_item(item: Item):
    return {"item_name": item.name, "item_price_with_tax": item.price * 1.2}

Що тут відбувається? Якщо користувач спробує надіслати ціну як слово "безкоштовно", FastAPI автоматично видасть помилку. Він гарантує, що всередині функції item.price — це точно число. Вам не треба це перевіряти if-ами!


4. 🛠 Практична частина

Тепер ваша черга! Відкрийте редактор коду (VS Code, PyCharm або навіть блокнот).

  1. 🔹 Повторити: Створіть файл main.py, вставте "Приклад 1" і запустіть командою в терміналі: uvicorn main:app --reload Відкрийте у браузері посилання, яке з'явиться.

  2. 🔹 Магія документації: Перейдіть за адресою http://127.0.0.1:8000/docs. Що ви бачите? Спробуйте натиснути кнопку "Try it out" і надіслати запит прямо з браузера. Круто, так?

  3. 🔹 Змінити умови: Додайте новий ендпоінт (маршрут) /calculator/{a}/{b}, який приймає два числа і повертає їх суму. Підказка: Не забудьте вказати типи аргументів як int.

  4. 🔹 Виправити помилку: Створіть функцію, яка приймає age: int. Спробуйте через документацію (/docs) надіслати туди слово "двадцять". Прочитайте повідомлення про помилку. Чи зрозуміле воно?

  5. 🔹 Міні-кейс: Уявіть, що ви робите сервіс погоди. Створіть ендпоінт, який приймає назву міста і повертає: {"city": city_name, "temperature": 20, "status": "sunny"}. (Поки що дані можуть бути фейковими).

  6. 🔹 А що, якщо... Видаліть типізацію (: int або : str) у вашому коді. Чи перестане код працювати? (Спойлер: працюватиме, але зникне магія перевірки та документації).


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі, дивлячись на код FastAPI?

  • Помилка новачка: Писати купу перевірок вручну всередині функції. python # ❌ Не робіть так if not isinstance(price, float): return "Error"
  • Думка профі: "Я опишу схему даних один раз за допомогою Pydantic, і нехай фреймворк робить брудну роботу за мене".

  • Порада з практики: Завжди використовуйте Type Hints. Це не просто для краси. Це дозволяє вашому редактору коду (IDE) підказувати вам методи й атрибути. Коли ви ставите крапку після item., ви хочете бачити список доступних полів, правда?


6. 🧩 Підсумок

Отже, що ми сьогодні дізналися?

  1. FastAPI — це швидкісний спосіб створення серверної частини (бекенду).
  2. Він базується на типах даних Python, що робить код надійним.
  3. Він дарує нам безкоштовну документацію.

Тепер ви вмієте: Запустити найпростіший веб-сервер і створити API, яке приймає дані, перевіряє їх і відповідає клієнту.

🔥 Тизер наступного уроку: Окей, ми навчилися приймати й віддавати дані. Але де їх зберігати? Вони зникають, коли ми вимикаємо сервер! На наступному уроці ми підключимо Базу Даних і навчимо наш додаток "пам'ятати" все вічно.

А поки що — це був CS50... тобто, це був вступ до FastAPI! 😉


Питання? (Чекаю на ваші експерименти з кодом!)