Вы думаете, что создание API — это удел опытных разработчиков, требующий часов настройки? Забудьте. FastAPI переворачивает представление о веб-разработке на Python. Это современный, быстрый фреймворк, который позволяет буквально за пять минут поднять полностью функциональное API с автоматической документацией, валидацией данных и асинхронной поддержкой. Давайте превратим эти пять минут в ваш первый работающий эндпоинт.
Что такое FastAPI и почему он так быстр?
FastAPI — это не просто ещё один фреймворк. Это высокопроизводительный инструмент, построенный на Starlette для веб-части и Pydantic для валидации данных. Его скорость обусловлена использованием асинхронности (async/await) и автоматической генерацией OpenAPI-схемы. Вы пишете код, а фреймворк сразу создаёт интерактивную документацию (Swagger UI и ReDoc). Это как иметь встроенного технического писателя.
Ключевая особенность FastAPI — автоматическая валидация данных на основе аннотаций типов Python. Вы описываете, какие данные ожидаете, а фреймворк проверяет их корректность и возвращает понятные ошибки, если что-то не так.
Пять минут до вашего первого API
Время пошло. Откройте терминал и следуйте шагам.
Шаг 1: Установка (1 минута)
Убедитесь, что у вас установлен Python 3.7+. Затем установите FastAPI и сервер Uvicorn, который будет запускать ваше приложение:
pip install fastapi uvicorn
Шаг 2: Создание файла (1 минута)
Создайте файл main.py и откройте его в любом редакторе кода.
Шаг 3: Написание кода (2 минуты)
Вставьте этот минимальный, но полноценный код:
from fastapi import FastAPI
app = FastAPI(title=\"Мой Супер-API\")
@app.get(\"/\")
async def read_root():
return {\"message\": \"Привет, мир! Мой API жив!\"}
@app.get(\"/items/{item_id}\")
async def read_item(item_id: int, q: str = None):
return {\"item_id\": item_id, \"query\": q}
Что мы сделали? Создали экземпляр приложения FastAPI, объявили два эндпоинта: корневой (GET /) и динамический (GET /items/{item_id}), который принимает параметр пути и опциональный query-параметр.
Использование async def необязательно для простых операций, но сразу открывает дорогу к асинхронным вызовам баз данных или внешних API без блокировок.
Шаг 4: Запуск (1 минута)
Вернитесь в терминал в папке с файлом main.py и выполните:
uvicorn main:app --reload
Флаг --reload включает автоматическую перезагрузку при изменении кода. Сервер запустится на http://127.0.0.1:8000.
Шаг 5: Тестирование и документация (0 минут — она уже готова!)
Откройте браузер и перейдите по адресу http://127.0.0.1:8000/docs. Вы увидите автоматически сгенерированную интерактивную документацию Swagger UI, где можно протестировать ваши эндпоинты прямо из браузера. Также доступна альтернативная документация по адресу http://127.0.0.1:8000/redoc.
Следующий уровень: Валидация и POST-запросы
Давайте расширим наше API, добавив эндпоинт для создания данных (POST) с полноценной валидацией. Для этого используем Pydantic модели.
from pydantic import BaseModel
from typing import Optional
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = False
@app.post(\"/items/\")
async def create_item(item: Item):
# Логика сохранения item в базу данных могла бы быть здесь
return {\"item_name\": item.name, \"item_price\": item.price}
Теперь, если отправить POST-запрос на /items/ с телом JSON, где поле name не строка или price не число, FastAPI автоматически вернёт детальную ошибку 422 с указанием, что пошло не так.
FAQ: Ответы на частые вопросы
Нужно ли знать OpenAPI/Swagger для работы с FastAPI?
Нет. FastAPI автоматически генерирует схему OpenAPI на основе вашего кода. Вы работаете с чистым Python, а документация создаётся сама.
Можно ли использовать FastAPI с синхронными библиотеками (например, для работы с БД)?
Да, можно. Для синхронных операций используйте обычные def функции вместо async def. Однако для максимальной производительности рекомендуется использовать асинхронные драйверы баз данных (например, asyncpg для PostgreSQL).
Как развернуть FastAPI приложение на продакшн-сервере?
Для продакшена используйте Uvicorn или Hypercorn с менеджером процессов, таким как Gunicorn. Например: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app. Также настройте прокси (Nginx) и HTTPS.
Чем FastAPI лучше Flask или Django REST Framework?
FastAPI предлагает из коробки: 1) Высокую скорость благодаря асинхронности, 2) Автоматическую валидацию и документацию, 3) Современный синтаксис на основе аннотаций типов. Он идеален для новых проектов, где важны производительность и developer experience.
Поддерживает ли FastAPI WebSockets и фоновые задачи?
Да, полностью. FastAPI имеет встроенную поддержку WebSockets для реального времени и механизм фоновых задач, которые выполняются после отправки ответа клиенту.
Ваши пять минут истекли. У вас теперь не только работает API, но и есть его полная документация, система валидации и основа для масштабирования. FastAPI доказывает, что мощные инструменты могут быть простыми в освоении. Осталось только добавить вашу бизнес-логику.