Представьте, что вам нужно создать веб-интерфейс для вашего приложения, который будет быстро работать, автоматически генерировать документацию и при этом писать его будет в удовольствие. Это не фантастика — это FastAPI, современный фреймворк на Python, который действительно позволяет развернуть рабочий API быстрее, чем вы успеете заварить чай. Давайте сделаем это вместе.
Почему именно FastAPI?
FastAPI построен на стандартах OpenAPI и JSON Schema, что даёт ему феноменальные преимущества: автоматическая интерактивная документация (Swagger UI и ReDoc), валидация данных на уровне типов, асинхронная поддержка из коробки и высокая производительность, сравнимая с Node.js и Go. Он идеален для микросервисов, бэкендов для SPA и быстрых прототипов.
FastAPI использует аннотации типов Python (type hints) не только для подсказок в IDE, но и для реальной валидации запросов и генерации схемы API. Это меняет правила игры.
Шаг 1: Установка и базовый скелет
Откройте терминал. Создайте виртуальное окружение и установите FastAPI и Uvicorn (ASGI-сервер для запуска).
pip install fastapi uvicorn
Создайте файл main.py и добавьте минимальный код:
from fastapi import FastAPI
app = FastAPI(title=\"Мой Супер-API\")
@app.get(\"/\")
async def root():
return {\"message\": \"Hello, API!\"}
Что здесь происходит?
- Импортируем класс
FastAPIи создаём экземпляр приложения. - Декоратор
@app.get(\"/\")указывает, что функцияrootбудет обрабатывать GET-запросы к корневому пути. - Функция возвращает словарь, который автоматически конвертируется в JSON.
Шаг 2: Запуск и первая проверка
Запустите сервер командой:
uvicorn main:app --reload
Откройте браузер и перейдите по адресу http://127.0.0.1:8000. Вы увидите ваше сообщение {\"message\": \"Hello, API!\"}. А теперь самое интересное — откройте /docs. Перед вами автоматически сгенерированная интерактивная документация Swagger UI, где можно тестировать ваш API прямо из браузера!
Параметр --reload автоматически перезагружает сервер при изменении кода. Незаменим для разработки.
Шаг 3: Добавляем реальные эндпоинты с параметрами
Давайте создадим что-то полезное. Например, API для управления списком задач (To-Do). Добавим в main.py:
from typing import Optional
from pydantic import BaseModel
class Task(BaseModel):
id: int
title: str
description: Optional[str] = None
completed: bool = False
tasks_db = []
@app.post(\"/tasks/\", response_model=Task)
async def create_task(task: Task):
tasks_db.append(task)
return task
@app.get(\"/tasks/{task_id}\", response_model=Task)
async def read_task(task_id: int):
# Здесь должна быть логика поиска по ID
return Task(id=task_id, title=\"Пример задачи\", completed=False)
Разбираем новые элементы
- Pydantic модель
Task: Определяет структуру данных. FastAPI использует её для валидации тела запроса (вcreate_task) и для генерации JSON-схемы. - Эндпоинт POST
/tasks/: Принимает JSON с задачей, валидирует его по модели и добавляет в «базу» (пока это список). - Эндпоинт GET с параметром пути
/tasks/{task_id}: Извлекаетtask_idиз URL и использует его. Попробуйте в Swagger UI!
Шаг 4: Запросы с query-параметрами и валидация
Добавим поиск задач с фильтрацией по статусу завершения:
from fastapi import Query
@app.get(\"/tasks/\")
async def list_tasks(completed: Optional[bool] = None, limit: int = Query(10, ge=1, le=100)):
filtered_tasks = tasks_db
if completed is not None:
filtered_tasks = [t for t in tasks_db if t.completed == completed]
return filtered_tasks[:limit]
Параметр completed — необязательный query-параметр. limit использует Query для дополнительной валидации: значение должно быть от 1 до 100 (ge — greater or equal, le — less or equal).
Шаг 5: Итог и куда двигаться дальше
За 5 минут мы создали API с несколькими типами эндпоинтов (GET, POST), валидацией данных, параметрами пути и запроса, а также получили готовую документацию. Это основа, на которую можно наращивать функционал: подключить реальную базу данных (например, SQLAlchemy + PostgreSQL), добавить аутентификацию (OAuth2 с JWT), CORS, фоновые задачи и развернуть на сервере (например, с помощью Docker).
Официальная документация FastAPI — одна из лучших в мире open source. Там вы найдёте исчерпывающие руководства по всем возможным сценариям.
FAQ: Часто задаваемые вопросы
FastAPI медленный?
Нет, он один из самых быстрых фреймворков на Python благодаря использованию Starlette (для веб-части) и Pydantic (для валидации).
Нужно ли знать асинхронное программирование?
Не обязательно. Вы можете писать синхронные функции, но для максимальной производительности в IO-операциях (запросы к БД, внешние API) рекомендуется использовать async/await.
Подходит ли FastAPI для больших проектов?
Абсолютно. Его модульность, поддержка зависимостей (Dependency Injection) и чёткая структура позволяют строить сложные приложения.
Есть ли поддержка WebSockets?
Да, FastAPI имеет встроенную поддержку WebSockets, что делает его отличным выбором для реального времени.