Представьте: вам нужно создать API для проекта, мобильного приложения или микросервиса. Раньше это требовало часов настройки, тонн шаблонного кода и головной боли с документацией. Сегодня с FastAPI вы можете развернуть полностью функциональный, документированный и быстрый API буквально за время приготовления кофе. Давайте сделаем это вместе — шаг за шагом, без сложной теории.
Что такое FastAPI и почему он так популярен?
FastAPI — это современный веб-фреймворк для создания API на Python, который сочетает скорость работы, простоту разработки и автоматическую генерацию документации. Он построен на стандартах OpenAPI и JSON Schema, что делает его идеальным как для быстрых прототипов, так и для production-систем.
Ключевые преимущества FastAPI: высокая производительность (сравнима с Node.js и Go), автоматическая интерактивная документация, встроенная валидация данных через Pydantic и поддержка асинхронности из коробки.
Подготовка окружения за 60 секунд
Прежде чем писать код, нужно установить необходимые пакеты. Откройте терминал и выполните:
- Создайте виртуальное окружение:
python -m venv venv - Активируйте его (Windows):
venv\\Scripts\\activateили (Mac/Linux):source venv/bin/activate - Установите 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-использования рекомендуется:
- Использовать Gunicorn с Uvicorn workers для Linux:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app - Настроить CORS, если API используется фронтендом:
from fastapi.middleware.cors import CORSMiddleware - Использовать переменные окружения для конфигурации
- Добавить логирование и мониторинг
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 ключи и другие методы аутентификации через встроенные инструменты безопасности. Есть подробная документация с примерами реализации.