FastAPI: современный фреймворк для API
2025-07-03

FastAPI: современный фреймворк для API

Читайте также:

FastAPI — это современный, быстрый (high-performance) веб-фреймворк для создания API на Python 3.7+ на основе стандартов OpenAPI и JSON Schema. Он позволяет быстро разрабатывать надёжные и масштабируемые RESTful-сервисы с минимальным количеством кода. Благодаря строгой типизации, автоматической генерации документации и поддержке асинхронности, FastAPI становится всё более популярным выбором среди разработчиков.

1. Преимущества FastAPI

FastAPI выделяется на фоне других Python-фреймворков благодаря ряду ключевых особенностей:

  • Высокая производительность — сопоставима с NodeJS и Go благодаря использованию Starlette (асинхронный веб-сервер) и Pydantic (валидация и сериализация данных).
  • Автоматическая документация — Swagger UI и ReDoc доступны "из коробки". Это значит, что вы сразу получаете красивую и интерактивную документацию для вашего API без дополнительной настройки.
  • Валидация данных — строгая типизация и автоматическая проверка входных данных на основе аннотаций типов Python.
  • Асинхронность — поддержка async/await позволяет строить высоконагруженные приложения, эффективно обрабатывающие множество одновременных запросов.
  • Простота и лаконичность — минимум шаблонного кода, высокая читаемость и простота поддержки.

Эти преимущества делают FastAPI отличным выбором как для небольших pet-проектов, так и для крупных промышленных решений.

2. Установка FastAPI и Uvicorn

Для запуска FastAPI-приложения потребуется ASGI-сервер, например, Uvicorn. Установка производится одной командой:

pip install fastapi uvicorn
  • fastapi — основной фреймворк для создания API.
  • uvicorn — быстрый ASGI-сервер, который будет запускать ваше приложение.

3. Пример простого API на FastAPI

Рассмотрим базовый пример приложения на FastAPI. Создайте файл main.py со следующим содержимым:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Добро пожаловать в FastAPI!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

Пояснения к коду:

  • from fastapi import FastAPI — импортируем основной класс приложения.
  • app = FastAPI() — создаём экземпляр приложения.
  • Декоратор @app.get("/") регистрирует обработчик GET-запроса по корневому адресу (/). Функция возвращает словарь, который автоматически преобразуется в JSON.
  • Второй обработчик @app.get("/items/{item_id}") демонстрирует работу с параметрами пути (item_id) и необязательным query-параметром (q). Типизация параметров позволяет FastAPI автоматически валидировать входные данные и генерировать документацию.

Чтобы запустить приложение, выполните команду:

uvicorn main:app --reload
  • main:app — указывает, что приложение находится в файле main.py и называется app.
  • Флаг --reload позволяет автоматически перезапускать сервер при изменении кода (удобно для разработки).

После запуска вы можете открыть в браузере:

4. Валидация и сериализация данных

Одно из главных преимуществ FastAPI — строгая валидация входных данных с помощью Pydantic. Рассмотрим пример POST-запроса с передачей данных в формате JSON:

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

Пояснения к коду:

  • BaseModel из Pydantic используется для описания схемы данных. Класс Item определяет структуру объекта: обязательные поля name (строка), price (число с плавающей точкой) и необязательное булево поле is_offer.
  • В обработчике create_item параметр item автоматически валидируется и преобразуется из JSON-запроса в экземпляр класса Item.
  • Если клиент отправит некорректные данные (например, строку вместо числа), FastAPI вернёт подробную ошибку с описанием проблемы.
  • Ответ также будет сериализован в JSON согласно описанной схеме.

Это позволяет легко создавать надёжные API с минимальными усилиями по обработке ошибок и валидации.

5. Асинхронные обработчики

FastAPI изначально поддерживает асинхронные функции-обработчики, что особенно важно для высоконагруженных приложений, работающих с внешними сервисами или базами данных.

@app.get("/async-endpoint")
async def async_endpoint():
    return {"message": "Асинхронный обработчик работает!"}

Пояснения к коду:

  • Ключевое слово async позволяет выполнять неблокирующие операции внутри обработчика (например, асинхронные запросы к БД или сторонним API).
  • FastAPI автоматически определяет, является ли функция асинхронной, и корректно её вызывает.

6. Сравнение с другими фреймворками

Ниже приведено сравнение популярных Python-фреймворков для создания API:

  • FastAPI: высокая производительность, отличная документация, поддержка асинхронности и строгая валидация данных.
  • Flask: хорошая производительность и документация, но нет асинхронности и строгой валидации "из коробки".
  • Django REST Framework: мощный инструмент для крупных проектов, поддерживает асинхронность и валидацию, но уступает FastAPI по скорости и лаконичности кода.

7. Полезные ссылки

Заключение

FastAPI — отличный выбор для создания современных, быстрых и надёжных API на Python. Благодаря автоматической документации, строгой типизации и поддержке асинхронности, он подходит как для небольших проектов, так и для крупных высоконагруженных систем. Даже если вы только начинаете знакомство с веб-разработкой на Python, FastAPI позволит быстро получить рабочий результат и понять современные подходы к созданию API.