Ну что, друзья, мы подошли к тому моменту, которого ждали с самого начала: создаем наше первое минимальное приложение на 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() # Базовый эндпоинт @app.get("/") async def read_root(): return {"message": "Добро пожаловать в наше минимальное приложение!"}Сохраняем файл и запускаем наше приложение через Uvicorn:
uvicorn main:app --reloadОткрываем браузер и заходим на
http://127.0.0.1:8000/. Ура, мы видим приветственное сообщение! Маленький шаг для кода, но огромный для нашего API. - Добавляем параметры запроса (Query Parameters)
Теперь сделаем наше приложение чуточку интереснее. Пусть оно сможет персонализировать приветствие с помощью имени, переданного в параметре запроса.
Обновим наш эндпоинт:
@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, и там вы увидите интерфейс, где можно протестировать ваши эндпоинты через удобный графический интерфейс. - Добавим дополнительный эндпоинт: проверим магию JSON
Для демонстрации работы с немного более сложными ответами добавим новый эндпоинт, который возвращает информацию в виде списка:
@app.get("/items/") async def get_items(): return {"items": ["яблоко", "банан", "апельсин"]}Эндпоинт
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. Добавление новых эндпоинтов, подключения баз данных и внешних сервисов начинается с таких шагов.
- Собеседования: умение быстро создать минимальное приложение демонстрирует ваши навыки в веб-разработке.
- Swagger UI: наличие документации из коробки экономит время и впечатляет коллег.
А ещё... Ещё FastAPI помогает держать ваш проект в чистоте, а это уже половина успеха.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ