Отже, друзі, ми дійшли до того моменту, на який чекали з самого початку: створюємо наш перший мінімальний застосунок на FastAPI! Сьогодні поєднаємо знання з попередніх лекцій, щоб зробити щось справжнє, хоч і невелике. Настав час "привітати" HTTP-запити й відправляти JSON-відповіді у відповідь на них.
Мета мінімального застосунку
Перед нами стоїть завдання — створити мінімальне API, яке зробить три речі:
- Привітає користувача (GET-запит).
- Дозволить йому передати ім'я через Query Parameters і відповісти персоналізованим привітанням.
- Упакує все це так, щоб ми могли побачити результат у Swagger UI і протестувати його.
Починаємо
- Створюємо проєкт
Спочатку переконайся, що в тебе є всі потрібні інструменти: Python, FastAPI і Uvicorn. Для цього зайди в папку проєкту (або створи нову) і встанови залежності:
pip install fastapi uvicornПісля цього створимо головний файл проєкту. За традицією назвемо його
main.py. - Базова структура застосунку
У файлі
main.pyми пишемо такий мінімальний код, щоб почати:from fastapi import FastAPI # Створюємо екземпляр застосунку FastAPI app = FastAPI() # Базовий endpoint @app.get("/") async def read_root(): return {"message": "Ласкаво просимо до нашого мінімального застосунку!"}Зберігаємо файл і запускаємо застосунок через Uvicorn:
uvicorn main:app --reloadВідкриваємо браузер і заходимо на
http://127.0.0.1:8000/. Ура, ми бачимо привітальне повідомлення! Маленький крок для коду, але великий для нашого API. - Додаємо параметри запиту (Query Parameters)
Тепер зробимо застосунок трішки цікавішим. Нехай він зможе персоналізувати привітання за допомогою імені, переданого в параметрі запиту.
Оновимо наш endpoint:
@app.get("/greet/") async def greet_user(name: str = "гість"): return {"message": f"Привіт, {name}!"}Знову запускаємо застосунок і перевіряємо: заходимо на
http://127.0.0.1:8000/greet/?name=Іван. Ми бачимо повідомлення:{"message": "Привіт, Іван!"}. Якщо прибрати параметрname, то отримаєш універсальне привітання:{"message": "Привіт, гість!"}. Красота! - Генерація документації (Swagger UI)
Не забувай, що FastAPI автоматично генерує документацію. Нам нічого робити окремо — Swagger UI вже підключений. Просто перейди за адресою
http://127.0.0.1:8000/docs, і там ти побачиш інтерфейс, де можна протестувати свої endpoint-и через зручний графічний інтерфейс. - Додаємо додатковий endpoint: перевіримо магію JSON
Для демонстрації роботи з трохи складнішими відповідями додамо новий endpoint, який повертає інформацію у вигляді списку:
@app.get("/items/") async def get_items(): return {"items": ["яблуко", "банан", "апельсин"]}Endpoint
http://127.0.0.1:8000/items/тепер поверне JSON-масив предметів. - Організація коду
Щоб не захаращувати
main.py, можна заздалегідь подумати про організацію коду (це хороша звичка). Давай створимо папкуappі розділимо наш файл на два: один для маршрутів, інший для ініціалізації застосунку:Структура проєкту:
project/ ├── app/ │ ├── __init__.py │ ├── main.py │ └── routes.pyroutes.py:from fastapi import APIRouter router = APIRouter() @router.get("/") async def read_root(): return {"message": "Ласкаво просимо до нашого мінімального застосунку!"} @router.get("/greet/") async def greet_user(name: str = "гість"): return {"message": f"Привіт, {name}!"} @router.get("/items/") async def get_items(): return {"items": ["яблуко", "банан", "апельсин"]}main.py:from fastapi import FastAPI from .routes import router app = FastAPI() app.include_router(router)Це допоможе зберігати код чистим і читабельним, особливо в міру зростання застосунку.
- Обробка помилок і налаштування відповідей
FastAPI дозволяє повертати специфічні HTTP-статуси і обробляти помилки. Наприклад, давай додамо просту обробку помилки, якщо користувач передав занадто довге ім'я в
greet_user:@app.get("/greet/") async def greet_user(name: str = "гість"): if len(name) > 10: return {"error": "Ім'я занадто довге!"}, 400 return {"message": f"Привіт, {name}!"}Тепер, якщо ти спробуєш передати
name=СупердовгеІм'я, API ввічливо повідомить про помилку і поверне код 400. - Повний код мінімального застосунку
Отже, ось мінімальний застосунок в одному файлі:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"message": "Ласкаво просимо до нашого мінімального застосунку!"} @app.get("/greet/") async def greet_user(name: str = "гість"): if len(name) > 10: return {"error": "Ім'я занадто довге!"} return {"message": f"Привіт, {name}!"} @app.get("/items/") async def get_items(): return {"items": ["яблуко", "банан", "апельсин"]}
Навіщо потрібен мінімальний застосунок?
- Реальні проєкти: мінімальний застосунок — основа для справжніх API. Додавання нових endpoint-ів, підключення баз даних і зовнішніх сервісів починається з таких кроків.
- Співбесіди: уміння швидко створити мінімальний застосунок демонструє твої навички в веб-розробці.
- Swagger UI: наявність документації "з коробки" економить час і вражає колег.
А ще... FastAPI допомагає тримати твій проєкт у чистоті, а це вже половина успіху.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ