FastAPI: Создаём рабочий API за 5 минут без магии

FastAPI: Создаём рабочий API за 5 минут без магии

Представьте: вам нужно создать API для проекта, мобильного приложения или микросервиса. Раньше это требовало часов настройки, тонн шаблонного кода и головной боли с документацией. Сегодня с FastAPI вы можете развернуть полностью функциональный, документированный и быстрый API буквально за время приготовления кофе. Давайте сделаем это вместе — шаг за шагом, без сложной теории.

Что такое FastAPI и почему он так популярен?

FastAPI — это современный веб-фреймворк для создания API на Python, который сочетает скорость работы, простоту разработки и автоматическую генерацию документации. Он построен на стандартах OpenAPI и JSON Schema, что делает его идеальным как для быстрых прототипов, так и для production-систем.

Ключевые преимущества FastAPI: высокая производительность (сравнима с Node.js и Go), автоматическая интерактивная документация, встроенная валидация данных через Pydantic и поддержка асинхронности из коробки.

Подготовка окружения за 60 секунд

Прежде чем писать код, нужно установить необходимые пакеты. Откройте терминал и выполните:

  1. Создайте виртуальное окружение: python -m venv venv
  2. Активируйте его (Windows): venv\\Scripts\\activate или (Mac/Linux): source venv/bin/activate
  3. Установите FastAPI и сервер: pip install fastapi uvicorn

Готово! Теперь у вас есть всё необходимое.

Пишем первый API: 3 минуты кода

Создайте файл main.py и добавьте следующий код:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI(title=\"Мой первый API\", version=\"1.0\")

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = False

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

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

@app.post(\"/items/\")
async def create_item(item: Item):
    return {\"item_name\": item.name, \"item_price\": item.price}

Что происходит в этом коде?

  • FastAPI() — создаёт экземпляр приложения
  • BaseModel от Pydantic определяет структуру данных с автоматической валидацией
  • Декораторы @app.get() и @app.post() определяют эндпоинты
  • Параметры функций автоматически парсятся из пути, query-параметров или тела запроса

Запуск и тестирование: 60 секунд

Вернитесь в терминал и выполните:

uvicorn main:app --reload

Откройте браузер и перейдите по адресу http://127.0.0.1:8000. Вы увидите JSON-ответ. Но главное — откройте http://127.0.0.1:8000/docs!

FastAPI автоматически создаёт интерактивную документацию Swagger UI и альтернативную ReDoc. Вы можете тестировать API прямо в браузере, отправляя запросы и видя ответы в реальном времени.

Добавляем полезные фичи

Давайте расширим наш API несколькими полезными элементами:

from typing import Optional
from datetime import datetime

# Добавляем эндпоинт с зависимостями
@app.get(\"/users/me\")
async def read_current_user():
    return {\"user_id\": \"current_user\"}

# Эндпоинт с кастомным статус-кодом
from fastapi import status
@app.post(\"/items/\", status_code=status.HTTP_201_CREATED)
async def create_item_advanced(item: Item):
    return {\"id\": 1, \"created_at\": datetime.now(), \"item\": item}

# Обработка ошибок
from fastapi import HTTPException
@app.get(\"/items/{item_id}/details\")
async def read_item_details(item_id: int):
    if item_id > 100:
        raise HTTPException(status_code=404, detail=\"Item not found\")
    return {\"item_id\": item_id, \"details\": \"Подробная информация\"}

Деплой в продакшн

Для production-использования рекомендуется:

  1. Использовать Gunicorn с Uvicorn workers для Linux: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
  2. Настроить CORS, если API используется фронтендом: from fastapi.middleware.cors import CORSMiddleware
  3. Использовать переменные окружения для конфигурации
  4. Добавить логирование и мониторинг

FAQ: Часто задаваемые вопросы

Нужно ли знать асинхронное программирование для работы с FastAPI?

Нет, вы можете использовать обычные синхронные функции. FastAPI автоматически определит, как их обрабатывать. Но асинхронность даёт преимущества при работе с I/O-операциями.

Чем FastAPI лучше Flask или Django REST Framework?

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

Можно ли использовать FastAPI с базами данных?

Да, FastAPI отлично работает с любыми базами данных через SQLAlchemy, Tortoise-ORM, databases или любые другие библиотеки. Он не навязывает свой ORM.

Подходит ли FastAPI для больших проектов?

Абсолютно. Его модульная структура, поддержка зависимостей (Dependency Injection) и совместимость со стандартами OpenAPI делают его отличным выбором для проектов любого масштаба.

Как добавить аутентификацию в FastAPI?

FastAPI поддерживает OAuth2, JWT токены, API ключи и другие методы аутентификации через встроенные инструменты безопасности. Есть подробная документация с примерами реализации.